Android Studio环境搭建
转载:http://gnaixx.cc/2016/03/07/ndk-android_studio-dev-env/
0.4.0是ExperimentalPlugin版本所以在使用的时候和正式版本的配置还是有挺大的差别的。官方文档官网。上面给出了Experimental Plugin版本使用说明,但是实际使用中还是发现了不少问题,比如签名配置。
0x00 Change Config
主要修改包括三个文件
- [1]
./app/build.gradle - [2]
./build.gradle - [3]
./gradle/wrapper/gradle-wrapper.properties
每个插件版本都对应着一个gradle版本
Plugin Version | Gragle Version |
---|---|
0.1.0 | 2.5 |
0.2.0 | 2.5 |
0.3.0-alpha3 | 2.6 |
0.4.0 | 2.8 |
0.6.0-alpha1 | 2.8 |
0.6.0-alpha5 | 2.10 |
因为我使用的是0.4.0版本所以需要将
./gradle/wrapper/gradle-wrapper.properties
中配置改为
#Wed Oct 21 11:34:03 PDT 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/
gradle-2.8-all
.zip
./build.gradle
修改classpath为当前的0.4.0版本插件
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
./app/build.gradle
./app/build.gradle文件需要改动的东西比较多,很多配置与正式版本不一样。
- 用
- ‘com.android.model.application’
替换
‘com.android.application’
如果是library模块改为
com.android.model.library - 在android外层添加根节点model { }
- 需要添加=给属性赋值
- 添加元素需要用add函数
下面这个是我自己项目的配置:
apply plugin: 'com.android.model.application'
model {
def signConf
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
applicationId = "com.example.gnaix.ndk"
minSdkVersion.apiLevel = 15
targetSdkVersion.apiLevel = 22
versionCode = 1
versionName = "1.0"
buildConfigFields.with {
create() {
type = "int"
name = "VALUE"
value = "1"
}
}
}
}
//编译设置
android.buildTypes {
release {
minifyEnabled = true
proguardFiles.add(file('proguard-rules.pro'))
signingConfig = signConf
ndk.with {
debuggable = false
}
}
debug{
minifyEnabled = false
proguardFiles.add(file('proguard-rules.pro'))
ndk.with {
debuggable = true
}
}
}
//签名设置
android.signingConfigs {
create("myConfig") {
keyAlias = 'gnaix'
keyPassword = '990828785'
storeFile = new File('/Users/xiangqing/Documents/workspace/android/gnaix.jks')
storePassword = '990828785'
storeType = "jks"
signConf = it
}
}
//ndk定义
android.ndk {
moduleName = "native" //设置库(so)文件名称
//CFlags.add("-DCUSTOM_DEFINE")
ldLibs.addAll(["log", "android", "EGL", "GLESv1_CM"])
//ldFlags.add("-L/custom/lib/path")
stl = "stlport_static"
}
//ndk编译参数
android.productFlavors {
create("arm") {
ndk.abiFilters.add("armeabi")
}
create("arm7") {
ndk.abiFilters.add("armeabi-v7a")
}
create("arm8") {
ndk.abiFilters.add("arm64-v8a")
}
create("x86") {
ndk.abiFilters.add("x86")
}
create("x86-64") {
ndk.abiFilters.add("x86_64")
}
create("mips") {
ndk.abiFilters.add("mips")
}
create("mips-64") {
ndk.abiFilters.add("mips64")
}
// To include all cpu architectures, leaves abiFilters empty
create("all")
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.0'
}
0x01 Signing Config
下面这段代码是官方文档给出的签名配置,但是在实际编译中报错了。改成上面的配置则可以了。
PS:之前我都是新建gradle.properties文件配置签名信息,方便多项目应用,可是在这里好像不行。
apply plugin: "com.android.model.application"
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
}
android.buildTypes {
release {
signingConfig = $("android.signingConfigs.myConfig")
}
}
android.signingConfigs {
create("myConfig") {
storeFile = new File("/path/to/debug.keystore")
storePassword = "android"
keyAlias = "androiddebugkey"
keyPassword = "android"
storeType = "jks"
}
}
}
0x02 Source Set
默认情况下C/C++文件是存放在src/main/jni目录下。可以配置android.sources节点改变路径。不过我还是喜欢默认路径。
model {
android {
compileSdkVersion = 22
buildToolsVersion = "22.0.1"
}
android.ndk {
moduleName = "native"
}
android.sources {
main {
jni {
source {
srcDir "src"
}
}
}
}
}
如果有已经编译好的SO包要添加引用:
android.sources {
main {
jniLibs {
dependencies {
library file("./libs/armeabi/libnative.so") abi "armeabi"
library file("./libs/armeabi-v7a/libnative.so") abi "armeabi-v7a"
library file("./libs/x86/libnative.so") abi "x86"
library file("./libs/mips/libnative.so") abi "mips"
}
}
}
}
注意这里需要写SO包命全称,加上lib。
0x03 Other Config
文档中还介绍了将SO作为一个独立的lib编译的方式,在实际操作中我也失败了,当时项目时间紧也就没有研究了=_=#。
文档示例/lib/build.gradle:
apply plugin: "com.android.model.native"
model {
android {
compileSdkVersion = 21
}
android.ndk {
moduleName = "hello"
}
android.sources {
main {
jni {
exportedHeaders {
srcDir "src/main/headers"
}
}
}
}
}
文档中还提到其他配置的使用方法,因为项目中没有用到,我也没试过。
示例项目地址https://github.com/gnaixx/as-ndk
下一篇将会介绍SO开发的JNI调用