视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Android JNI 过程解析
2025-10-02 15:08:46 责编:小OO
文档
Android JNI 过程解析

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

开发环境

JDK 1.6.0.12 

SDK2.1  

1、Eclipse中新建Android工程

工程名 JNItest   

Package名com.ura.test   

Activity名 JNItest   

应用程序名 JNItest  

2、 编辑main.xml

< ?xml version="1.0" encoding="utf-8"?>   

< LinearLayout xmlns:android="http://schemas.Android.com/apk/res/Android"   

Android:orientation="vertical"   

Android:layout_width="fill_parent"   

Android:layout_height="fill_parent"   

>   

< TextView   

Android:id="@+id/JNITest"   

Android:layout_width="fill_parent"   

Android:layout_height="wrap_content"   

Android:text="@string/JNITest"   

/>   

< /LinearLayout>   

3、编辑java文件 - JNItest.java

package com.ura.test;   

import Android.app.Activity;   

import Android.os.Bundle;   

import Android.widget.TextView;   

public class JNITest extends Activity {   

/** Called when the activity is first created. */   

static {   

System.loadLibrary("JNITest");   

}   

public native String GetTest();   

@Override   

public void onCreate(Bundle savedInstanceState) {   

super.onCreate(savedInstanceState);   

setContentView(R.layout.main);   

String str =GetTest();   

TextView JNITest = (TextView)findViewById(R.id.JNITest);   

JNITest.setText(str);   

}   

}  

4、生成head文件 

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

    打开命令行,进入到Eclipse工程目录JNItest

运行 javah -classpath bin -d jni com.ura.test.JNITest  

生成的头文件com_ura_test_JNItest.h  内容如下

/* DO NOT EDIT THIS FILE - it is machine generated */   

#include < jni.h>   

/* Header for class com_ura_test_JNITest */   

#ifndef _Included_com_ura_test_JNITest   

#define _Included_com_ura_test_JNITest   

#ifdef __cplusplus   

extern "C" {   

#endif   

/*   

* Class: com_ura_test_JNITest   

* Method: GetTest   

* Signature: ()Ljava/lang/String;   

*/   

JNIEXPORT jstring JNICALL Java_com_ura_test_JNITest_GetTest   

(JNIEnv *, jobject);   

#ifdef __cplusplus   

}   

#endif   

#endif  

5、编写c/c++文件com_ura_test_JNITest.c如下

#include "com_ura_test_JNItest.h"   

#define LOG_TAG "JNITest"   

#undef LOG   

#include    

JNIEXPORT jstring JNICALL Java_com_ura_test_JNITest_GetTest   

(JNIEnv * env, jobject obj)   

{

LOGD("Hello LIB!\\n");    

return (*env)->NewStringUTF(env, (char *)

"JNITest Native String");     

}   

6、编写Android.mk文件

LOCAL_PATH:= $(call my-dir)   

include $(CLEAR_VARS)   

LOCAL_SRC_FILES:= com_ura_test_JNITest.c   

LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)   

LOCAL_SHARED_LIBRARIES := libutils   

LOCAL_PRELINK_MODULE := false   

LOCAL_MODULE := libJNITest   

include $(BUILD_SHARED_LIBRARY)  

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

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

7、编译生成动态库

新建文件夹~/mydroid/external/libJNITest  

把上面编写好的头文件com_ura_test_JNItest.h,c/c++源文件com_ura_test_JNITest.c,make文件Android.mk拷贝进上面目录中

在ubuntu中执行  

$cd build/   

$source envsetup.sh  

$cd .. 

$cd external/libJNITest/   

$mm  

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

out/target/product/generic/system/lib/  

8、在模拟器中执行程序

把动态库拷进/system/lib中。

启动模拟器

adb shell   

Mount -o remount, rw /system

exit  

adb push libJNITest.so /system/lib  

确认拷贝成功。

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

执行java程序JNITest

会看到屏幕上打印出

JNITest Native String下载本文

显示全文
专题