出于接下来的对app进行dex分包准备,这两天专门看了下用gradle命令行进行apk的签名和打包。
之前本人一直使用adt的右键export功能进行给app打包和签名的(很不够逼格),因为没用过android studio,所以对gradle了解甚微。前段时间boss让我想想,在app应用功能越来越庞大的趋势下,有些功能是给特定用户的用的,不一定全部打包进一个apk里面,所以想到了1.插件化;2.dex分包,插件化已经搞通了,dex分包貌似需要在配置文件里面配置相关参数,然后用gradle进行分包,这些是题外话啦,自行百度。
于是我就来 熟悉下gradle,不想用android studio先,虽然各种头衔,什么谷歌主推啊界面酷炫啦。好吧,那我就用命令行进行gradle打包,摸索了两天,记录如下:
1.将原有eclipse下面的安卓项目导出为gradle配置项目,项目-》右键-》export-》Generate Gradle build files;
2.在选择需要导出为gradle的项目时,只选择自己的主项目,依赖项目不要选,系统会帮你自动找出来的;
3.然后在最后一步的时候勾选这个,目的是生成各种配置文件;
ok,已经生成了gradle需要的配置文件,比如build.gradle,settings.gradle 什么的,一应齐全。你以为现在就可以运行gradle build了吗?大错特错。
先看sdk的导出为gradle给我的项目带来了什么文件或目录,看图:
gradle-wrapper.properties中,你可以修改需要的gradle版本
build.gradle中配置打包过程的一些参数
settings.gradle配置了项目的依赖
最最主要的就是build.gradle,配置了相当多的东西,本人也是在里面进了许多坑,默认的东西就不用改了:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
}
}
主要是添加自己的东西,在我的项目里面,我添加了另外两个个节点,dependencies{}, android{},一个是依赖节点,一个是打包过程配置节点,一开始不知道要增加这些,躺了不少坑。不多说,先看看配置:
dependencies {
compile files('libs/AMap_3DMap_V2.2.1.jar')
compile files('libs/Android_2DMapApi_V2.5.0.jar')
compile files('libs/Android_Location_V1.3.3.jar')
compile files('libs/Android_Services_2.2.0.jar')
compile files('libs/android-support-v4.jar')
compile files('libs/easemobchat_2.2.2.jar')
compile files('libs/fastjson-1.1.33.jar')
compile files('libs/jpush-sdk-release1.7.5.jar')
compile files('libs/nineoldandroidslib.jar')
compile files('libs/umeng_sdk.jar')
compile project(':androidLibs:myLibProject')
}
fils里面是依赖包,其实可以简写用*号代替
project里面是lib项目的导入
再看看android几点里面的配置:
android {
compileSdkVersion 19
buildToolsVersion "19.1.0"
//签名
signingConfigs {
myConfig {
storeFile file('')//证书路径,可以是绝对路径也可以相对路径
storePassword ''//证书密码
keyAlias ''//证书名称
keyPassword ''
}
}
buildTypes{
release {
signingConfig signingConfigs.myConfig//在release使用上面的证书配置
}
}
lintOptions {
abortOnError false//lint编译时给的建议,就是lint有错时不退出编译
}
packagingOptions {
exclude 'META-INF/NOTICE.txt'//本人打包时多个项目的,重复复制这个文件到apk或出错,所以配置这个属性
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'//同上
}
defaultConfig {
minSdkVersion 8
targetSdkVersion 20
}
sourceSets {
main {
//项目文件、目录配置
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDir(['libs'])//特别指出,这个是用来编译so文件的
}
instrumentTest.setRoot('tests')
}
}
坑总结:
1.sdk版本太低,更改build.gradle的
android {
compileSdkVersion 19
buildToolsVersion "19.1.0"
}
属性
2.强烈建议网络可以访问墙外网站,使用vpn*软件都可以,因为build的时候会下载一些gradle的依赖文件
3.资源文件中不能有重名的属性,比如定义两个名字为testStr的字符串资源
4..9图片最起码需要左上两边要有黑线,不然会报错
5.依赖项目的相关activity不能同时有<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />属性,不然打出来的apk安装后会有两个启动图标
6.编译使用的sdk路径在local.properties文件中定义,比如我的sdk.dir=C\:\\Users\\Luo\\AppData\\Local\\Android\\sdk
大概就是这么多,希望共同学习