Eclipse与AS很难说哪个工具比较厉害,从谷歌的更新历史来说,AS肯定是趋势,Eclipse对后续的SDK等不再支持。在同事的强烈建议之下,还是从Eclipse转向万能的AS了,转的过程中单纯从Eclipse导入到AS中,这一步是比较简单的,AS会寻找Eclipse中的prject.properties文件,当AS选择import时会自动导入到AS中,同时会在AS下生成跟Eclipse一样project 名字。但是由于项目包含NDK,因此AS中进行了对NDK相关的配置以及系统自动签名,这些也都是Stackflow上一些大牛的建议。我的系统环境是ubuntn12.04。
1. NDK配置
AS貌似对NDK的支持不是很好,因此我不打算使用AS IDE 环境自动编译,选择ndk-build方式进行编译。首先下载ndk-build工具,这个在android.developer上有资源,可自行下载,下载解压后,在/etc/profile下增加对NDK环境变量的支持。
NDK_HOME=/home/..... (NDK解压目录)
export PATH=$PATH:$NDK_HOME
进行source /etc/profile更新环境变量。
在project中加入jni文件夹,把相关的文件加入其中,并添加Android.mk编译文件,至于Android.mk是怎么写的,大家自行google吧,网上太多。加入Android.mk文件后,可以在app/src/main位置执行ndk-build操作,成功执行后会在app/src/mian/libs下生成*.so文件,如果有错,就看看Android.mk或者源文件有什么错误,进行debug。
上述ndk-build后,会在app/src/mian/libs下生成*.so库文件,我们的目的也达成了,但是我想着能否让AS IDE自动执行,而不是每次修改文件后都在Terminal中执行ndk-build操作,在Stackflow中找到了解决方法。
在AS IDE中左侧选择Android,找到build.gradle(Moule: app),我们可以输入类似下面操作方法。
import org.apache.tools.ant.taskdefs.condition.Os
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
defaultConfig{
minSdkVersion 15
targetSdkVersion 19
versionCode 101
versionName "1.0.1"
}
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = [] //disable automatic ndk-build call
}
// call regular ndk-build(.cmd) script from app directory
task ndkBuild(type: Exec) {
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath
} else {
commandLine 'ndk-build', '-C', file('src/main').absolutePath
}
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
}
上述srcipt code中,绿色为禁止AS IDE自动编译,红色为根据系统平台选在ndk-build工具,这样当Make Project时会在app/src/main/libs下生成相应的*.so库文件。
2. AS IDE系统自动签名
由于APK以及*.so文件需要进行系统签名,但是想让AS IDE工具进行自动系统签名,不想自己每次都通过命令重复简单劳动。
2.1 让Android Studio集成系统签名,需要用到一个工具keytool-importkeypair。
keytool-importkeypair
keytool-importkeypair – A shell script to import key/certificate pairs into an existing Java keystore
keytool-importkeypair工具,可以通过git clone (github源地址)进行下载。
相关文件
platform.x509.pem、platform.pk8、keytool-importkeypair、demo.jks、signature.sh
在app根目录(下面有build, src等目录)下新建signature目录,在AS中生成demo.jks签名文件。
上述是网上找到别人的图片,如果冒犯请原谅。
2.2 编写签名脚本signature.sh,内容如下:
#!/bin/sh
./keytool-importkeypair -k demo.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias demo
为脚本文件添加可执行权限:
$ sudo chmod a+x signature.sh
执行脚本:
$ ./signature.sh
2.3 配置builde.gradle
在android区域下(与defaultConfig同级)添加配置:
signingConfigs { release { storeFile file("./signature/demo.jks") storePassword '123456' keyAlias 'demo' keyPassword '123456' } debug { storeFile file("./signature/demo.jks") storePassword '123456' keyAlias 'demo' keyPassword '123456' } }
3. 完成上述步骤2之后,如果需要build apk release中自动加入签名,则需要在build.gradle中buildTypes下
buildTypes{
release{
signingConfig signingConfigs.release
}
debug{
sigingConifg signingConfigs.release
}
}
加入上述code之后,当选择build apk时,会在outputs下自动生成app-release.apk文件,此文件即为release + signature apk。