本博客与RayXXZhang的博客保持同步更新,转载请注明来自RayXXZhang的博客-从Eclipse迁移到Android Studio
Android Studio发布正式版后,Google的重心转向AS,以后可能也会逐步停止对Eclipse的支持,而且目前开源项目有很多以及不支持Eclipse。因此决心将项目转到Android Studio进行开发。
安装
Android Studio的安装需要联网并且下载Android SDK和gradle等等才能使用。
同时AS的使用需要配合相应位数的JDK,并且JDK的路径需要设置到JAVA_HOME环境变量。
AS的安装包大约300-400MB,但安装好后加上SDK等等其他依赖,占用空间可能达到8GB以上。
因此如果能获取到AS安装后的文件也可以直接复制使用。复制时需要复制Android Studio安装文件夹,SDK文件夹,以及个人目录下的.gradle和.androidstudiox.y文件夹,其中x.y为AS的版本号,其中存放着AS的配置。
导入
Eclipse项目迁移到AS的第一步是更新Eclipse的AJDT插件,然后在文件菜单选择导出,将Eclipse工程导出成AS工程。导出后会在目录下生成build.gradle文件,
然后在AS选择导入非AS工程的选项即可导入,第一次使用由于需要分析构建整个项目,所以速度会比较慢。
注意事项
so库的支持
如果是纯java的项目,导入后就基本能编译运行了,如果项目中还依赖so库,
可以通过在build.gradle文件中添加jniLibs.srcDirs = [‘so文件的目录’]来导入so库
android {
// 其他配置
sourceSets {
main {
//其他配置
jniLibs.srcDirs = ['libs']
}
}
}
META-INF中文件重复的问题
有些第三方库会在META-INF文件夹中放一些版权说明的文件,如果不止一个库在放了同名的文件,
在打包时gradle就无法决定应META-INF文件夹中应该使用哪个文件。
这种情况下,可以通过在build.gradle文件中排除这些文件来解决。
版权文件的文件名通常是LICENSE, NOTICE, license.txt, notice.txt之一。
因此可以通过如下配置排除:
android {
// 其他配置
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/license.txt'
exclude 'META-INF/notice.txt'
// 还可添加其他要排除的文件
}
}
该方法也可以用于排除其他不想被打包到APK里的文件。
小技巧
动态设置编译版本号
build.gradle文件中可以设置编译出的APK的版本号,如果设置了版本号,则会覆盖Manifest.xml中设置的版本号。
这样,就给我们提供了一个动态修改编译版本号的方法。如果版本控制使用了SVN,就可以通过编写如下函数来实现动态获取SVN版本号和编译时间:
def getVersionCode = {
try {
def code = new ByteArrayOutputStream()
exec {
commandLine '用于获取版本号的命令'
standardOutput = code
}
return Integer.valueOf(code.toString().split("\r\n")[0])
}
catch (ignored) {
return 0;
}
}
def getVersionName = {
try {
def code = new ByteArrayOutputStream()
exec {
commandLine '用于获取版本号的命令'
standardOutput = code
}
def date = new ByteArrayOutputStream()
exec {
commandLine '用于获取编译时间的命令'
standardOutput = date
}
return code.toString().split("\r\n")[0] + "." + date.toString().split("\n")[0]
}
catch (ignored) {
return "";
}
}
android {
updateSVNInfo()
defaultConfig {
versionCode getVersionCode()
versionName getVersionName()
minSdkVersion 8
targetSdkVersion 23
}
APK签名配置
在Eclipse里debug版本的签名只能使用默认的签名,而在Android Studio中可以通过build.gradle来配置签名所使用的证书:
android {
// 其他配置
signingConfigs {
debug {
storeFile file("签名密钥路径")
keyAlias '密钥Alias'
keyPassword '密钥密码'
storePassword '存储密码'
}
// 可以指定其他编译类型的配置,如release
}
}
配置debug和release使用一样的签名就避免了在debug和release混合安装的时候出现签名错误需要重新卸载后再安装的问题。