今天跟实验室师兄聊天,得知通过NDK可以用C++给Android开发应用程序,于是下载了adt-bundle-linux-x86-20131030.zip和android-ndk-r9c-linux-x86.tar.bz2的最小版本,两个压缩包直接解压就可以了,JDK我是以前安装的1.7版本的。
从网上搜索了一下NDK的入门程序,自己跟着步骤一点点做下去,顺利编译处理.class文件,但是在生成.h文件时出现了问题,执行
javah -classpath bin/classes -d jni com.example.hellojni.HelloJni,出现”找不到Android.app.Activity的类文件“的错误,于是到stackoverflow上搜了一下,里面也有人出现了同样的问题,其中一个给出的答案如下:
-classpath <android-sdk-location>/platforms/android-8.jar;bin\classes
也就是在classpath中添加android的jar包,运行了一下,在我这个版本中,还是没有运行通过,于是继续找其他人给出的解答,其中有一个如下:
添加 -bootclasspath
<android-sdk-location>/platforms/android-8.jar
于是照着这个思路,在我现在安装的版本下,执行了如下的命令:
javah -bootclasspath /home/lmyh/development/adt-bundle-linux-x86-20131030/sdk/platforms/android-19/android.jar -classpath bin/classes -d jni/ com.com.example.hellojni.HelloJni
这一次终于运行通过。
可是jar包的路径也太长了,每次输入这么多也挺麻烦的,于是就在家目录下在.bashrc中添加了如下的变量:
export ANDROID_JAR="/home/lmyh/development/adt-bundle-linux-x86-20131030/sdk/platforms/android-19/android.jar"
source了一下文件后,执行
javah -bootclasspath $ANDROID_JAR -classpath bin/classes -d jni/ com.com.example.hellojni.HelloJni
没有通过,估计source后没事没有把ANDROID_JAR添加到环境变量中。于是重新启动,这次执行成功,然后继续进行下个步骤!
一直进行到新建一个启动模拟器都没有什么问题,但是启动模拟器的时候就会出现问题,首先在console上会出现
Waiting for HOME ('android.process.acore') to be launched...
然后就停止不动了,模拟器也没有任何反映,如何搜索该怎么办,有的人给出的答案是又击project,然后重新点击Run as,也有人说点击Project->Clean,反正我照做了都没有解决问题,没办法之下,于是我就不做任何处理,既然说在等待HOME被加载,那就让他等吧,大约5分钟左右后,模拟器果然就在console上显示
[2014-01-14 13:33:51 - HelloJni] Waiting for HOME ('android.process.acore') to be launched...
[2014-01-14 13:38:46 - HelloJni] HOME is up on device 'emulator-5554'
[2014-01-14 13:38:46 - HelloJni] Uploading HelloJni.apk onto device 'emulator-5554'
[2014-01-14 13:38:48 - HelloJni] Installing HelloJni.apk...
[2014-01-14 13:40:48 - HelloJni] Success!
[2014-01-14 13:40:49 - HelloJni] Starting activity com.example.hellojni.HelloJni on device emulator-5554
不仅加载了HOME,而且程序都已经安装到模拟器了,将模拟器解锁后,在应用程序中找一下,会看到HelloJni程序,运行就会输出相应的字符串了.