android ndk编译jni的配置

之前有人问到怎么使用Android Studio进行NDK开发,经过网上搜索,自己也尝试了一下,用Android Studio进行NDK开发比Eclipse更加灵活方便。

以下是翻译自 NDK With Android Studio 这篇文章。

在ADT中进行NDK开发非常简单,在Android Studio进行NDK开发也同样的容易。NDK开发主要有两中情况:一种是使用已经编译好的.so动态库;一种是使用c/c++源代码开发。下面分别介绍。

使用预编译好的.so动态库

你可以先用ndk-build工具先编译好.so,然后在Android Studio中引用。 这种情况比较件简单,只要把的.so文件放到相应的目录即可。如下所示:

  • [module_name]
    • [src]
      • [main]
        • [jniLibs]
          • [armeabi]
          • [armeabi-v7a]
          • [x86]
          • [mips]

注意 jniLibs 目录是放在 module 下面,在Android Studio中效果如下:jniLibsPath

现在就可以在代码中直接载入此库了,如下:

String libName = "helloNDK"; // 库名, 注意没有前缀lib和后缀.so  
System.loadLibrary( libName );  

如果你不想把.so放在上面的默认路径,可以在buid.gradle中进行如下配置:

android {  
  // .. android settings ..
  sourceSets.main {
    jniLibs.srcDir 'src/main/myCppLibraries' // <-- 你的.so库的实际路径
    }
}

在Android Studio编译C/C++源代码

如果你不想像上面那样,在终端中用ndk-build编译.so,然后回到Android Studio中写Java代码。可以直接让Android Studio帮你编译。配置方法如下:

1.配置 ndk.dir

在 local.properties 添加如下配置:

  sdk.dir=/path/to/android-sdk
  ndk.dir=/path/to/android-ndk
2.Gradle配置NDK模块
android {  
  compileSdkVersion 19
  buildToolsVersion "20.0.0"
  defaultConfig {
    applicationId "com.example.ndksample"
    minSdkVersion 9
    targetSdkVersion 19
    versionCode 1
    versionName "1.0"
    ndk {
      moduleName "helloNDK" // <-- This is the name of my C++ module!
    }
  }
  // ... more gradle stuff here ...
} // end of android section

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

ndk {  
  moduleName "myEpicGameCode"
  cFlags "-DANDROID_NDK -D_DEBUG DNULL=0"   // Define some macros
  ldLibs "EGL", "GLESv3", "dl", "log"	   // Link with these libraries!
  stl "stlport_shared"					  // Use shared stlport library
}

3.添加C/C++源代码

默认情况下,你需要把C/C++源代码放在 [module]/src/main/jni/ 路径下。效果如下图所示:jniSrcPath

当然,你也可以自定义源代码路径:

android {

  // .. android settings ..

  sourceSets.main {
      jni.srcDirs 'src/main/source'
  }
}
4.分平台配置编译(可选)

这一步不是必须的,你可以根据需要,对各个平台进行不同的编译配置,可以设置覆盖前面的编译选项(例如 cFlags )。例如你只想编译指定平台的.so,而不是所有的平台。如下:

android {
  // .. android settings ..
  productFlavors {
    x86 {
      ndk {
        abiFilter "x86"
      }
    }
    arm {
      ndk {
        abiFilter "armeabi-v7a"
      }
    }
    mips {
      ndk {
        abiFilter "mips"
      }
    }
  }
} // android

 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值