b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

ubuntu android ndk开发环境搭建_android ndk开发_ubuntu android 驱动

电脑杂谈  发布时间:2017-05-12 21:01:10  来源:网络整理

首先需要下载NDK编译工具,目前官方最新的NDK版本是r11c,为了保证稳定性,我下的是r11b。

能翻墙的可以从谷歌官网下载,地址为:https://developer.android.com/ndk/downloads/index.html

不能翻墙的也可以从下面网站下载,该网站提供了Android开发各种工具的下载:

将下载下来的文件进行解压,我这里解压到~/android/android-ndk-r11b。ubuntu android ndk开发环境搭建

然后在~/.profile文件中加入如下内容,将NDK目录加入到PATH中:

最后执行“source ~/.profile”使之生效。

配置好环境变量之后,需要验证一下是否搭建成功,在命令行下输入ndk-build,有如下提示则表示搭建成功了。

在Android Studio中创建一个Android工程,我这里创建一个名为NDKJNIDemo的工程。

在项目中的local.properties文件中添加如下代码来指定ndk的目录:

在module的build.gradle文件的android.defaultConfig添加如下代码:

这里配置的moduleName就是编译生成so库的名字,比如这里生成的so库名字为“libNDKJNIDemo.so”。ubuntu android ndk开发环境搭建

ndk还可以配置更多选项,如下:

Android Studio默认会编译所有平台下的so库。

如果你只想编译指定平台的so库,可以加入如下配置,在module的build.gradle文件的android中加入如下代码:

效果如下:

我这里创建了一个JniUtils类,并且创建了一个名为getStringFromC()的nativie方法,该方法作用就是简单的从JNI层返回一个字符串给Java层,代码如下:

这里得注意loadLibrary加载的so库的名字必须和上面第3步配置的moduleName保持一直,否则会报找不到库文件的异常。

进入module/build/intermediates/classes/debug目录下,在命令行下使用javah生成头文件,我这里是这样的:

完了之后会在module/build/intermediates/classes/debug目录下生成相应的头文件,我这里生成的是com_liuling_ndkjnidemo_JniUtils.h,内容如下:

在module/src/main/下面新建jni目录,ndk会默认编译该目录下的源文件。目录结构如下图:

当然,你也可以自定义C/C++源代码目录,在module的build.gradle文件的android中添加如下代码:

将前面生成的头文件拷贝到C/C++源代码目录,并创建相应的C代码文件,我这里创建了com_liuling_ndkjnidemo_JniUtils.c,内容如下:

Java_com_liuling_ndkjnidemo_JniUtils_getStringFromC方法就是对应JniUtils里的native方法getStringFromC()。

大家会发现几个问题:

为什么运行程序之后在main下面没找到so库呢?

为什么编译时不需要Android.mk文件呢?

默认情况下ndk将生成的so库放到了build下面去了,同时也会使用一个默认的Android.mk文件进行编译,如下图:

那我们能否覆盖默认的设置呢?答案时肯定的!

首先在项目gradle文件的android{}中添加如下代码:

然后在gradle文件最底部添加一个ndk编译task:

注意:使用上述命令必须确定ndk的环境变量配置好了,也就是确定ndk的目录加到PATH中去了,否则该任务会执行失败。

最后自己在jni目录下面建立Android.mk和Application.mk文件,直接点击AS上的运行就会先执行NDK编译的过程。

Android.mk:

Application.mk:

可以看到,默认情况下可以在gradle中的ndk中配置以上这些信息:


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-46740-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...