AS1.3 及其以上预览版新插件-实验版(NDK)
Posted Qiujuer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AS1.3 及其以上预览版新插件-实验版(NDK)相关的知识,希望对你有一定的参考价值。
序
在新版的AS预览版中我发现对于NDK的支持有所变化。
在新的插件版本中加强了对NDK的支持以及性能的优化。
于是查询了一下文档,特此写了该文章,为尝鲜的朋友准备,喜欢尝鲜的朋友可以试试,个人感觉味道不错。
在之前版本的时候我写过如何在AS中编译NDK:
[Android] 环境配置之Android Studio开发NDK
本篇文章是一篇半翻译文章,来源于AS的说明文档,在文章底部会附上原文链接。
本篇文章中的东西来源于预览版,本文章中的方法已测试有效;但不建议用于生产开发。
介绍
这是一个新的试验性插件,该组建基于新的Gradle组建模型;在配置上能显著减少时间。在新的插件中包括了使用JNI开发NDK的一键式操作。在本指南中提供了详细的使用方式,同时强调了新的插件与原始插件之间的区别。
警告:该插件是试验性插件。有关该插件的Gradle API也并不是最终版本。这意味着他只是特定版本的API,也可能只能在特定版本中使用。
此外。DSL可能发生大量改变,在最终版本中有可能采用新的API代替。
该实验插件是改善了NDK集成与性能相关的早期预览版本(这两个问题来自于用户反馈)。
需求
- Gradle 2.5 (仅仅)
- android NDK R10e 版本(如果你需要使用NDK)
- SDK 构建工具最低版本 19.0.0 ,一些功能可能需要更新的版本
- AS 1.3 预览版及其更高版本
迁移
从之前版本迁移到最新预览版。在下面显示了新的预览版的项目结构,更改的地方使用红色表示。
./gradle/wrapper/gradle-wrapper.properties
新的插件仅仅只支持 gradle-2.5.
#Wed Apr 10 15:27:10 PDT 2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-2.5-all.zip
./build.gradle
其中Classpath 应该配置为 com.android.tools.build:gradle-experimental
以前是 com.android.tools.build:gradle
当前可使用版本为: 0.2.0.
// 提示: 顶层配置,你也可以在你的子项目或者子Model中添加对应配置
buildscript
repositories
jcenter()
dependencies
classpath 'com.android.tools.build:gradle-experimental:0.2.0'
// 提示: 别把项目所需依赖写在这里,他们属于Model中的 build.gradle 文件
allprojects
repositories
jcenter()
./app/build.gradle
在该插件中有着许多有关DSL变化。其中很多变化似乎有些奇葩,并不必要;因为在我看来插件变化应该尽量简单以减少插件迁移的代价。
DSL 变更:
- Apply 默认插件名现在是
com.android.model.application
在之前的版本中是:com.android.application
. 如果我们的Model是另外的库或者aar 那么现在应该为:com.android.model.library
- 根配置应该加上 model 模块
- 大多属性应该加上
'='
操作符 - 如果是为集合添加对应的元素应该使用
'+='
操作符
使得 DSL 更局限性的变更:
- buildTypes, productFlavors 和 signingConfigs 配置必须写在 android 模块以外
- 能在 android 模块中嵌套使用的配置需要加上
with
关键字. - 属性也将只能使用所支持的直接属性,而没法使用其他类型而后进行转换(如果该属性是int类型,将只能输入int值,而不能是string字符然后强制转换)。例如:
- 文件类型属性将直接接受文件类型,而不接受String类型。
- 不能直接使用 minSdkVersion 接受一个 int 或者 string 类型,而需要写为:
minSdkVersion.apiLevel = 15
.
- 创建一个buildType 或者 productFlavor 等标记需要调用
create
方法. 修改一个现有的,如buildType中的release或者debug标记可以直接使用名称就可以了. - 现在修改DSL 的变量或者任务是非常非常局限的.
dependencies
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
NDK 相关
在该实验插件中使用NDK创建Android本地程序。 你需要:
使用下载工具下载 NDK 包并配置好环境.
在项目local.properties
文件中设置 ndk.dir
变量并指定你的 NDK 路径,也可以在环境变量中设置 ANDROID_NDK_HOME 为你计算机上的 NDK 路径.
在你的 model 中的 build.gradle
文件中添加 android.ndk
板块.
已知局限
- 不支持NDK-only模块;仅仅支持混合的app或者lib库的项目编译。
- 编译项目时并不会重复编译已编译完成的JNI代码(AAR库中的所有so文件仅仅只是简单打包到APK中,不会进行重复编译)。
- 不支持创建可依赖静态库。
- 不支持使用诸如
cpu_features
的NDK库。 - 不支持集成外部构建系统。
Model 中的 build.gradle
中的 NDK 配置诸如这样:
提示:项目中的 moduleName
属性是必须的,它定义了 NDK 所生成的文件名。
默认情况下,JNI 文件应该放到项目的目录为:src/main/jni
,在其中你可以放C/C++代码;当然你也可以重新定义该默认目录。
model
android
compileSdkVersion = 22
buildToolsVersion = "22.0.1"
android.ndk
moduleName = "native"
android.sources
main
jni
source
srcDir 'src'
其他的编译属性你可以设置到android.ndk
模块中,诸如:
model
android
compileSdkVersion = 22
buildToolsVersion = "22.0.1"
android.ndk
// 所有可以在 android.ndk 中定义的配置.
moduleName = "native"
toolchain = "clang"
toolchainVersion = "3.5"
// 提示:CFlags 是一个C的资源, 其命名与常规的属性并不一样. 这是一个技术限制,但在以后会解决。
CFlags += "-DCUSTOM_DEFINE"
cppFlags += "-DCUSTOM_DEFINE"
ldFlags += "-L/custom/lib/path"
ldLibs += "log"
stl = "stlport_static"
android.buildTypes
release
ndk.with
debuggable = true
android.productFlavors
create("arm")
ndk.with
// 你可以在 productFlavors 和 buildTypes 节点中配置 NDK 相关的属性
abiFilters += "armeabi-v7a"
create("fat")
// 如果未指定 ndk.abiFilters 属性,那么将会生成所有的CPU版本ABI.
// 你可以修改所有的 NDK 属性
components.android
binaries.afterEach binary ->
binary.mergedNdkConfig.cppFlags.add(
"-DVARIANT=\\"" + binary.name + "\\"")
原文链接
需要梯子:
http://tools.android.com/tech-docs/new-build-system/gradle-experimental
案例
这里有一些Google官方的案例,地址:
https://github.com/googlesamples/android-ndk.
我的博客中的案例会放到:
https://github.com/qiujuer/BeFoot
========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:github.com/qiujuer/Genius-Android
开源库:github.com/qiujuer/Blink
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/47961763
—— 学之开源,用于开源;初学者的心态,与君共勉!
========================================================
以上是关于AS1.3 及其以上预览版新插件-实验版(NDK)的主要内容,如果未能解决你的问题,请参考以下文章
一文掌握Flutter for Windows桌面端稳定版新特性
一文掌握Flutter for Windows桌面端稳定版新特性