为了账号安全,请及时绑定邮箱和手机立即绑定

Android Studio中NDK开发

标签:
Android

更新(2015.07.24):本文说的方法是针对Android Studio 1.3 之前的版本,从 AS 1.3 开始,官方支持了 NDK 的开发,可以参考这里


之前有人问到怎么使用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

原文链接:http://www.apkbus.com/blog-839902-61322.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消