zoukankan      html  css  js  c++  java
  • Android Jni代码示例讲解

    在今天介绍的这篇文章中,我们将会通过几个步骤对Android Jni的使用方法做一个详细的介绍,希望能给大家带来一些帮助。

    Android 模 拟器中可以对Android手机操作系统进行适当的修改,增加各种功能,以满足用户的需求。那么今天我们会为大家带来Android Jni的相关使用方法,以方便大家对这一系统的解读。Android的应用程序(Dalvik VM)中使用JNI(Java Native Interface)调用C/C++开发的共享库。

    开发环境

    1. (eclipse + Android ADT)   
    2. WindowsXP SP3   
    3. JDK 1.6.0.12   
    4. VMWARE+Ubuntu Linux 8.04  

    Android Jni使用方法步骤(1) Eclipse中新建Android工程

    1. 工程名 JNItest   
    2. Package名com.ura.test   
    3. Activity名 JNItest   
    4. 应用程序名 JNItest  

    Android Jni使用方法步骤(2) 编辑main.xml

    1. < ?xml version="1.0" encoding="utf-8"?>   
    2. < LinearLayout xmlns:android=
      "http://schemas.Android.com/apk/res/Android"   
    3. Android:orientation="vertical"   
    4. Android:layout_width="fill_parent"   
    5. Android:layout_height="fill_parent"   
    6. >   
    7. < TextView   
    8. Android:id="@+id/JNITest"   
    9. Android:layout_width="fill_parent"   
    10. Android:layout_height="wrap_content"   
    11. Android:text="@string/JNITest"   
    12. />   
    13. < /LinearLayout>   

    Android Jni使用方法步骤(3)编辑java文件

    1. package com.ura.test;   
    2. import Android.app.Activity;   
    3. import Android.os.Bundle;   
    4. import Android.widget.TextView;   
    5. public class JNITest extends Activity {   
    6. /** Called when the activity is first created. */   
    7. static {   
    8. System.loadLibrary("JNITest");   
    9. }   
    10. public native String GetTest();   
    11. @Override   
    12. public void onCreate(Bundle savedInstanceState) {   
    13. super.onCreate(savedInstanceState);   
    14. setContentView(R.layout.main);   
    15. String str =GetTest();   
    16. TextView JNITest = (TextView)findViewById(R.id.JNITest);   
    17. JNITest.setText(str);   
    18. }   
    19. }  

    Android Jni使用方法步骤(4)生成head文件 

    编译上面工程声称class文件,然后用javah工具生成c/c++头文件。

    1. javah -classpath bin -d jni com.ura.test.JNItest  

    生成的头文件如下

    1. /* DO NOT EDIT THIS FILE - it is machine generated */   
    2. #include < jni.h>   
    3. /* Header for class com_ura_test_JNITest */   
    4. #ifndef _Included_com_ura_test_JNITest   
    5. #define _Included_com_ura_test_JNITest   
    6. #ifdef __cplusplus   
    7. extern "C" {   
    8. #endif   
    9. /*   
    10. * Class: com_ura_test_JNITest   
    11. * Method: GetTest   
    12. * Signature: ()Ljava/lang/String;   
    13. */   
    14. JNIEXPORT jstring JNICALL Java_com_ura_test_JNITest_GetTest   
    15. (JNIEnv *, jobject);   
    16. #ifdef __cplusplus   
    17. }   
    18. #endif   
    19. #endif  

    Android Jni使用方法步骤(5)编写c/c++文件如下

    1. #include "com_ura_test_JNITest.h"   
    2. #define LOG_TAG "JNITest"   
    3. #undef LOG   
    4. #include < utils/Log.h>   
    5. JNIEXPORT jstring JNICALL Java_com_ura_test_JNITest_GetTest   
    6. (JNIEnv * env, jobject obj)   
    7. {   
    8. return (*env)->NewStringUTF(env, (char *)
      "JNITest Native String");   
    9. LOGD("Hello LIB!\n");   
    10. }   

    Android Jni使用方法步骤(6)编写Android.mk文件

    1. LOCAL_PATH:= $(call my-dir)   
    2. include $(CLEAR_VARS)   
    3. LOCAL_SRC_FILES:= \   
    4. com_ura_test_JNITest.c   
    5. LOCAL_C_INCLUDES := \   
    6. $(JNI_H_INCLUDE)   
    7. LOCAL_SHARED_LIBRARIES :libutils   
    8. LOCAL_PRELINK_MODULE :false   
    9. LOCAL_MODULE :libJNITest   
    10. include $(BUILD_SHARED_LIBRARY)  

    Android Jni使用方法步骤(7)编译生成动态库

    新建文件夹

    1. ~/mydroid/external/libJNITest  

    把上面编写好的头文件,c/c++源文件,make文件拷贝进上面目录中

    * 需要注意的是把PRELINK_MOUDULE设置成false

    否则需要重新做成img文件再烧入。

    在ubuntu中执行

    1. cd   
    2. cd mydroid/build/   
    3. envsetup.sh   
    4. cd ~/mydroid   
    5. cd external/libJNITest/   
    6. mm  

    编译成功的后会在下面目录中生成libJNITest.so文件

    1. ~mydroid/out/target/product/generic/system/lib/  

    Android Jni使用方法步骤(8)在模拟器中执行程序

    首先要把动态库拷进/system/lib中。

    启动模拟器

    1. adb shell   
    2. adb remount   
    3. adb push libJNITest.so /system/lib  

    确认拷贝成功。

    1. cd /system/lib   
    2. ls  

    然后不要关闭模拟器(关掉再开动态库就没了,因为模拟器rom是只读)

    执行java程序JNITest

    会看到屏幕上打印出

    JNITest Native String

    Android Jni的具体使用方法就为大家介绍到这里。

    【责任编辑:曹凯 TEL:(010)68476606】
  • 相关阅读:
    mysql 远程登陆不上
    hdu 5339 Untitled【搜索】
    SqlServer 书目
    passwordauthentication yes
    oracle 11g RAC ocfs2
    Oracle 11g RAC database on ASM, ACFS or OCFS2
    CentOS ips bonding
    Oracle 11g RAC features
    openStack 王者归来之 trivial matters
    openstack windows 2008 img
  • 原文地址:https://www.cnblogs.com/xiaoxiaoboke/p/2352765.html
Copyright © 2011-2022 走看看