WEB开发网
开发学院手机开发Android 开发 Android上JNI的调试 阅读

Android上JNI的调试

 2010-05-31 14:43:00 来源:WEB开发网   
核心提示:prelink工具:《Android Toolchain与Bionic Libc》)LOCAL_MODULE - 编译的目标对象BUILD_SHARED_LIBRARY - 指明要编译成动态库,接下来回到Android顶层目录,Android上JNI的调试(2),并执行make libhello来编译:# cd $(Y
prelink工具:《Android Toolchain与Bionic Libc》)

LOCAL_MODULE - 编译的目标对象

BUILD_SHARED_LIBRARY - 指明要编译成动态库。

接下来回到Android顶层目录,并执行make libhello来编译:

# cd $(YOUR_ANDROID) && make libhello

target thumb C: libhello <= development/hellolib/hellolib.c

target SharedLib: libhello (out/target/product/generic/obj/SHARED_LIBRARIES/libhello_intermediates/LINKED/libhello.so)

target Non-prelinked: libhello (out/target/product/generic/symbols/system/lib/libhello.so)

target Strip: libhello (out/target/product/generic/obj/lib/libhello.so)

Install: out/target/product/generic/system/lib/libhello.so

编译结果可得到位于out/target/product/generic/system/lib/目录的动态共享库libhello.so

2.编写Java模块,来通过JNI方式调用C接口。具体Eclipse环境的搭建请参考Android SDK文档中的详细说明,及Hello Android程序的创建过程,这里仅给出我们需要修改的TestHelloLib.java文件:

package com.test;

import android.app.Activity;

import android.os.Bundle;

public class TestHelloLib extends Activity {

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

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

printHello();

}

static {

System.loadLibrary("hello");

}

private native void printHello();

}

注意上面代码中粗体字部分:private native void printHello()用来声明一个native接口,static { System.loadLibrary("hello"); } 用来加载上面步骤中生成libhello.so(注意loadLibrary方法的参数不是”libhello.so”,而是去掉前缀和后缀之后的”hello”),onCreate()方法中则调用了printHello()接口。

通过这一步骤可生成Android开发者所熟悉的apk文件:TestHelloLib.apk。

3.集成测试TestHelloLib.apk和libhello.so。先运行emulator并将TestHelloLib.apk和libhello.so上传至emulator中。注意要将libhello.so上传到emulator的/system/lib目录,由于该目录是只读的,上传之前先要执行adb

Tags:Android JNI 调试

编辑录入:coldstar [复制链接] [打 印]
赞助商链接