android工具01:Linux下NDK的安装配置及hellojni实例说明

最近在研究openwnn开源输入法,该输入法开源代码中并没有将c代码转为so文件,因此这一步需要自己做。

为了完成以上目标,学习了一下在linux环境下如何搭建android开发环境及ndk。由于我都是在windows下开发,因此只用了ndk环境用于生成so文件。

在编写android程序的时候如果需要复用一部分以前的c语言程序,可以考虑使用NDK。由于设计到c和c++编程,故强烈建议在Linux下安装上eclipse的CDT插件。安装方法同安装其他插件的方式一样,推荐离线安装,方法这里不再赘述。
在使用NDK之前需要下载android-ndk包(具体下载地址请到百度搜索),下载解压后将解压后的文件夹拷贝到自定义的目录下面(如“/root/”目录下,这里的root是当前登陆的用户名,若你的用户名不同,则也不同,比如我的就是/xuxm/),如图一所示。


和安装jdk的过程相同,下一步的工作便是配置ndk的环境变量。修改“/etc/”下的profile文件,在profile的”unmask 022”语句之前加上“NDKROOT=/root/android-ndk-r7b(这里android-ndk-r7b是指你下载的android-ndk包解压后的文件夹名称)“和”export PATH=$NDKROOT:$PATH”如图2所示(如果不行,可以可以在“~/.bashrc”文件末尾添加以上两个命令即可),修改保存,利用“source/etc/profile”命令执行其中的命令以更改环境变量。


这一步的目的,实际上是为了更改环境变量。当然,更改环境变量还有其他方法,比如:

如何下载和安装android-ndk我这里就不啰嗦了,安装完之后,需要将android-ndk的路劲加到环境变量PATH。
sudo gedit /etc/environment
在environment的PATH环境变量中添加你的android-ndk的安装路劲(我用的是/root/android-ndk-r7b),然后再让这个更改的环境变量立即生效:
source /etc/environment

自此,ndk的安装完成,可以在shell中输入“ndk-build”命令来检查你的安装是否成功,如果不是显示“ndk-build not found”,而是如图3所示的提示,则说明你的ndk安装成功。


如果你看到的提示是“ndk-build not found”,比较可能的问题是你的环境变量设置错误。

到此为止,就可以在eclipse当中使用ndk了。如果你对ndk不是太熟悉,你可以运行ndk自带的sample来体验ndk的功能。这里以ndk解压包中的“samples/”下的”hello-jni”为例来示范。

编译Native Code
i) 在命令行(Windows 环境下使用Cygwin的命令行) ,将当前目录改动到 <ndk-root>/samples/hello-jni
ii) 生成build.xml
android update project -p . -s (注:Windows下可能需要 使用android.bat )
iii) 编译C代码
cd <ndk-root>/samples/hello-jni
<ndk_root>/ndk-build

这时候,你就会在libs文件夹下看到,多了一个文件夹armeabi。该文件夹下有一个libhello-jni.so文件。这个就是我们所需要的so文件。
下面就可以使用Eclipse 编译运行 Hello Jni.


这里需要说明一个问题。在hellojni的源码中,java代码

public class HelloJni extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* Create a TextView and set its content. * the text is retrieved by calling a native * function. */ TextView tv = new TextView(this); tv.setText( stringFromJNI() ); setContentView(tv); } /* A native method that is implemented by the * 'hello-jni' native library, which is packaged * with this application. */ public native String stringFromJNI(); /* This is another native method declaration that is *not* * implemented by 'hello-jni'. This is simply to show that * you can declare as many native methods in your Java code * as you want, their implementation is searched in the * currently loaded native libraries only the first time * you call them. * * Trying to call this function will result in a * java.lang.UnsatisfiedLinkError exception ! */ public native String unimplementedStringFromJNI(); /* this is used to load the 'hello-jni' library on application * startup. The library has already been unpacked into * /data/data/com.example.HelloJni/lib/libhello-jni.so at * installation time by the package manager. */ static { System.loadLibrary("hello-jni"); } } 这里,我们会发现,我们生成的so文件名为:libhello-jni.so,而java代码在导入这个文件时,使用的字符串是“hello-jni”。这里大家可以发现,它去掉了开头的lib和结尾的.so。

参考资料:

Linux下NDK的安装配置
Android NDK 开发教程三:Hello JNI 示例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值