文章目錄
  1. 1. Android环境
  2. 2. NDK
    1. 2.1. 配置
    2. 2.2. 可能遇到的问题
      1. 2.2.1. NDK插件错误
      2. 2.2.2. NDK位置未指定
      3. 2.2.3. 连接不上本地库
  3. 3. 参考

打算将先前写的一个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是系统自带的,其他的是官网下载的。按照说明一步步安装就是,被墙困住的可以百度一下,教程很多。我将下载的包放在了百度云上,下载请点击

Android开发所需安装包

NDK

配置

下载安装说明还是首推官网,不过很可惜还是被墙。NDK下载可以从上面的云盘中获得,中文指导可以看下面的两个链接:

可能遇到的问题

按上面配置说的运行例子,可能会遇到一些问题,下面按照我遇到的顺序说一下:

  • NDK插件错误

    NDK插件错误
    解决方法: 在项目根目录下创建配置文件gradle.properties,里面加入
1
android.useDeprecatedNdk=true

然后点击下图所示按钮,重新启动Gradle同步即可。
同步gradle按钮

  • NDK位置未指定

    解决方法: 重新指定NDK位置,方法有二
    1. 点击错误提示中的Select NDK,通过对话框选择
    2. 在根目录的local.properties文件中添加
1
ndk.dir=/Users/charlyzhang/AndroidStudioProjects/android-ndk-r10e (NDK位置)
  • 连接不上本地库

    这个问题发生在例子hello-gl2中,Gradle同步没有问题,可连机编译时出现如下错误:
    连接不上本地库

显然是没有连接上Native Lib。
网上有人说:

  • Android.mk中添加以下代码
1
LOCAL_LDLIBS    := -llog -lGLESv2

没有解决我的问题,官方例子中已做好了这一步,问题依然在。

后来找到两个可行的解决方法,两个都是修改app文件夹下的build.gradle文件:

  1. android{…}中的defaultConfig {…}修改,添加如下连接信息:
    连接本地库解决方法1

  2. 编译JNI本地库,再在android{…}中添加如下本地库重定位信息:
    重定位本地库

编译JNI本地库也可以采用两种方式:

  • 手动编译:命令行进入app/src/main/jni文件夹,输入ndk-build命令;(这与导入例子后在根目录用ndk-build命令构建工程不是一步
  • 自动编译:在build.gradle文件的最后,android{…}以外添加如下代码:
1
2
3
4
5
6
7
task ndkBuild(type: Exec) {
commandLine 'ndk-build', '-C',file('src/main/jni').absolutePath
}

tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}

参考

文章目錄
  1. 1. Android环境
  2. 2. NDK
    1. 2.1. 配置
    2. 2.2. 可能遇到的问题
      1. 2.2.1. NDK插件错误
      2. 2.2.2. NDK位置未指定
      3. 2.2.3. 连接不上本地库
  3. 3. 参考