现在的位置: 首页 > 编程技术 > 安卓开发 > 正文

使用 Android Studio 进行 NDK 开发

2015年11月22日 安卓开发 ⁄ 共 1622字 ⁄ 字号 使用 Android Studio 进行 NDK 开发已关闭评论 ⁄ 阅读 783 次

这篇文章介绍如何直接在 Android Studio 中编写 NDK 代码并在打包 APK 时自动编译。

在 Android Studio 中开 NDK 主要做三件事:

  1. local.properties 配置 ndk.dir
  2. build.gradle 中配置 NDK 模块,即 C++ 工程
  3. 添加 C++ 代码文件到指定的目录,如:\<module\> / [app] / [src] / [main] / [jni]
  4. (可选)多同平台(不同的CPU架构)编译

1. 在 local.properties 文件中配置 ndk.dir

使用 Android Studio 建立的项目会在项目的根目录生成名称为 local.properties 文件。

配置代码:

1
2
sdk.dir=/Users/shanee/Development/Android/sdk
ndk.dir=/Users/shanee/Development/ndk

2. 在 build.gradle 中配置 NDK 模块

build.gradle 示例配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
android {
    compileSdkVersion 19
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "com.example.ndksample"
        minSdkVersion 9
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"

        ndk {
            moduleName "myEpicGameCode" // <-- This is the name of my C++ module!
        }
    }

    // ... more gradle stuff here ...

} // end of android section

还可以在 ndk 块中指定一些编译参数、依赖库等:

1
2
3
4
5
6
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++ 代码必须添加在指定的目录:

  • [module_name]
    • ············[src]
    • ················[main]
    • ····················[jniLibs] ———————- so 目录
    • ····················[jni] —————————- jni 代码目录

C/C++ 代码目录示例:

使用 Android Studio 进行 NDK 开发

完成以上的步骤,就可以编译了,如果 C/C++ 中代码有错误也会提示编译失败的哦。

如果不想使用默认的 JNI 目录,可以在 build.gradle 中指定目录,在 sourceSets.main 块中添加脚本:

1
2
3
4
5
6
7
8
android {
  
  // .. android settings ..

  sourceSets.main {
      jni.srcDirs 'src/main/source'
  }
}

4. (可选)多同平(CPU架构)台编译

如果要针对不同的平台分别做优化配置,也可以通过修改 build.gralde 脚本实现,参考配置脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
android {
  
  // .. android settings ..

  productFlavors {
        x86 {
            ndk {
                abiFilter "x86"
            }
        }
        arm {
            ndk {
                abiFilter "armeabi-v7a"
            }
        }
        mips {
            ndk {
                abiFilter "mips"
            }
        }
    }

} // android

同样在 ndk 块中可以指定编译参数,依赖库等配置。

这篇文章是从 Google+ 上的一篇帖子翻译过来的,没有示例项目的源码;原文地址:NDK With Android Studio(需翻墙).

抱歉!评论已关闭.