NDK开发(一)——AS中配置环境

2016-06-14  本文已影响2475人  LichFaker

开发环境

Mac OSX 10.11.2
Android Studio 2.1
NDK-r11c

准备工作

  1. 下载并解压NDK, 官网下载历史版本

  2. 添加到PATH中
    该操作不是必须的,如果通过命令ndk-build的方式手动编译的话则最好配置环境变量。初次执行ndk-build会提示:

Mac系统需要在~/.bash_profile文件中配置NDK_PROJECT_PATH,如下:

export NDK_PROJECT_PATH=../ndk/android-ndk-r11c #你的ndk目录
export PATH=$NDK_PROJECT_PATH:$PATH
# 执行 source ~/.bash_profile 使之生效
source ~/.bash_profile

集成到Android Studio 中

  1. 新建一个Android工程NDKTest
  2. 添加android.useDeprecatedNdk=true到app下的gradle.properties
  3. Project Structure->SDK Location->Android NDK Location中指定NDK的路径;或者直接在local.properties文件中指定ndk.dir,最终该文件内容为:
ndk.dir=../ndk/android-ndk-r11c
sdk.dir=../sdk
  1. main文件夹下创建一个JNI Folder
  2. 添加如下gradle配置:
defaultConfig {
    ...
    ndk {
        // 模块名称
        moduleName = "ndk-test"
        // 指定编译平台,更多平台信息 参见https://developer.android.com/ndk/guides/abis.html#sa
        abiFilters "armeabi", "armeabi-v7a"
    }
}
sourceSets.main {
    // 你的源码目录
    jni.srcDir 'src/main/jni'
}
  1. 创建一个NDKTest类,加载库并声明native方法:
package com.lichfaker.ndktest;
public class NDKTest {
    static {
        System.loadLibrary("ndk-test");
    }
    public static native String getString();
}
  1. 此时方法getString()是有错误提示的,按下alt+enter创建native方法(如果之前没有指定sourceSets.main则这里具体方法无法创建成功)如下:
  2. 定义const char * returnValue = "Hello Jni";并在Activity中调用NDKTest.getString()

运行测试

  1. 运行测试抛出了异常:
    java.lang.UnsatisfiedLinkError: Couldn't load ndk-test from loader dalvik.system.PathClassLoader...
    猜测可能是运行平台的原因,于是使用真机测试,但是然并卵...
    于是google之,终于找到了原因:
    原来gradle默认是将编译好的so文件放到libs目录下的, 而我们加载Library的时候默认是去main->jniLibs下查找的。
    我这是修改了jniLibs的默认路径为libs
sourceSets.main {
    // 你的源码目录
    jni.srcDir 'src/main/jni'
    jniLibs.srcDirs = ['libs']
}
  1. 重新打包运行,成功显示Hello Jni _
上一篇下一篇

猜你喜欢

热点阅读