打算将先前写的一个OBJ模型查看工具objViewer应用在Android平台上,借此了解一下Android平台的开发。现在做到了运行 NDK samples,将这中间遇到的问题记录一下。
Android环境
系统: Mac OS 10.11.1
JDK: java version "1.8.0_65"
IDE: Android Studio 1.5.1
Android SDK: r24.4.1
JDK是系统自带的,其他的是官网下载的。按照说明一步步安装就是,被墙困住的可以百度一下,教程很多。我将下载的包放在了百度云上,下载请点击
NDK
配置
下载安装说明还是首推官网,不过很可惜还是被墙。NDK下载可以从上面的云盘中获得,中文指导可以看下面的两个链接:
可能遇到的问题
按上面配置说的运行例子,可能会遇到一些问题,下面按照我遇到的顺序说一下:
NDK插件错误
解决方法: 在项目根目录下创建配置文件gradle.properties,里面加入
android.useDeprecatedNdk=true
然后点击下图所示按钮,重新启动Gradle同步即可。
NDK位置未指定
解决方法: 重新指定NDK位置,方法有二 1. 点击错误提示中的Select NDK,通过对话框选择 2. 在根目录的local.properties文件中添加
ndk.dir=/Users/charlyzhang/AndroidStudioProjects/android-ndk-r10e (NDK位置)
连接不上本地库
这个问题发生在例子hello-gl2中,Gradle同步没有问题,可连机编译时出现如下错误:
显然是没有连接上Native Lib。 网上有人说:
在Android.mk中添加以下代码
LOCAL_LDLIBS := -llog -lGLESv2
没有解决我的问题,官方例子中已做好了这一步,问题依然在。
后来找到两个可行的解决方法,两个都是修改app文件夹下的build.gradle文件:
将**android{...}中的defaultConfig {...}**修改,添加如下连接信息:
编译JNI本地库,再在**android{...}**中添加如下本地库重定位信息:
编译JNI本地库也可以采用两种方式:
手动编译:命令行进入app/src/main/jni文件夹,输入ndk-build命令;(这与导入例子后在根目录用ndk-build命令构建工程不是一步)
自动编译:在build.gradle文件的最后,**android{...}**以外添加如下代码:
task ndkBuild(type: Exec) {
commandLine 'ndk-build', '-C',file('src/main/jni').absolutePath
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
参考