没有合适的资源?快使用搜索试试~ 我知道了~
首页Android JNI总结
资源详情
资源评论
资源推荐

JNI 总结
JNI 有多重实现方式,一下会详细讲解多种方式:
1 应用级
用 eclipse 构建一个应用程序,JNITest1。
Xml 代码
1 < ?xml version="1.0" encoding="utf-8"?>
2 < LinearLayout xmlns:android=
3 "http://schemas.Android.com/apk/res/Android"
4 Android:orientation="vertical"
5 Android:layout_width="$ll_parent"
6 Android:layout_height="$ll_parent"
7 >
8 < TextView
9 Android:id="@+id/JNITest"
10 Android:layout_width="$ll_parent"
11 Android:layout_height="wrap_content"
12 Android:text="@string/JNITest"
13 />
14 < /LinearLayout>
JAVA 代码:
package com.jni.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. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String str=GetTest();
TextView tv=(TextView)findViewById(R.id.JNITest);
tv.setText(str);

}
static{
System.loadLibrary("JNITest1");//libJNITest1.so
}
public native String GetTest();
}
在 java 文件生成 class 文件后,进入工程根目录,使用如下命令:
javah -classpath bin -d jni com.jni.test.JNITest
会在根目录下生成 jni 目录:
com_jni_test_JNITest.h 如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
#ifndef __com_jni_test_JNITest__
#define __com_jni_test_JNITest__
#ifdef __cplusplus
extern "C"
{
#endif
JNIEXPORT jstring JNICALL Java_com_jni_test_JNITest_GetTest (JNIEnv *env,
jobject);
#ifdef __cplusplus
}
#endif
#endif /* __com_jni_test_JNITest__ */
在 external 目录下,建立目录 TestJNI/libJNITest1,将 com_jni_test_JNITest.h 复
制到该目录下,建立 a.c 如下:
#include "com_jni_test_JNITest.h"
#define LOG_TAG "JNITest"
#undef LOG
#include <utils/Log.h>
JNIEXPORT jstring JNICALL Java_com_jni_test_JNITest_GetTest
(JNIEnv *env, jobject fggg)//一定要补上
{

return (*env)->NewStringUTF(env,(char *)"JNITest1 native String");
LOGD("Hello LIB!\n");
}
编写 Android.mk 文件,内容如下:
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=a.c
LOCAL_C_INCLUDES:=$(JNI_H_INCLUDE)
LOCAL_SHARED_LIBRARIES:=libutils
LOCAL_PRELINK_MODULE:=false
LOCAL_MODULE:=libJNITest1
include $(BUILD_SHARED_LIBRARY)
执行命令模式如下:
cd
cd mydroid/build/
envsetup.sh
cd ~/mydroid
cd external/libJNITest/
mm
mm 输出:
make: Entering directory `/home/smrdn/Android/android-1.6_r2'
target thumb C: libJNITest1 <=
/home/smrdn/Android/android-1.6_r2/external/TestJni/libJNITest1/a.c
target SharedLib: libJNITest1
(out/target/product/generic/obj/SHARED_LIBRARIES/libJNITest1_intermediat
es/LINKED/libJNITest1.so)
target Non-prelinked: libJNITest1
(out/target/product/generic/symbols/system/lib/libJNITest1.so)
target Strip: libJNITest1 (out/target/product/generic/obj/lib/libJNITest1.so)
Install: out/target/product/generic/system/lib/libJNITest1.so
make: Leaving directory `/home/smrdn/Android/android-1.6_r2'
实验证明只要是在 external 中的目录下的 jni 都会出现如上情况,在不同的目录
下生成目标模块。
Android Jni 使用方法步骤(8)在模拟器中执行程序
首先要把动态库拷进/system/lib 中。
启动模拟器
adb shell
剩余13页未读,继续阅读












安全验证
文档复制为VIP权益,开通VIP直接复制

评论1