- 常用打包指令(命令端执行)
./gradlew assembleDebug 编译并打Debug包
./gradlew assembleRelease 编译并打Release的包
./gradlew clean 清除9GAG/app目录下的build文件夹
./gradlew build 检查依赖并编译
- 配置文件
基本配置
gradle是用groovy语言配置的
compileSdkVersion 编译sdk的版本
buildToolsVersion
buildType配置
minifyEnabled 表示是否开启代码混淆
zipAlignEnabled 对齐处理(使用sdk的zipalign工具)
shrinkResources 设置为true的时候打包后会删除无用的资源
multiDexEnabled 构建多dex,让app的方法数可以超过65K
proguardFiles 代码混淆文件
manifestPlaceholders 设置manifest文件里面的占位符
签名文件
signingConfigs. 表示配置的签名打包的文件
项目下面有个nt.keystore,表示的就是打包用到的签名文件
splits 打包拆分
构建系统让您能够自动构建不同的 APK,并且每个 APK 只包含特定屏幕密度或应用二进制界面 (ABI) 所需的代码和资源。
首先是按照abi拆分:
splits {
abi {
enable true
reset()
include ‘x86’, ‘armeabi’, ‘armeabi-v7a’ //select ABIs to build APKs for
universalApk false // generate an additional APK that contains all the ABIs
}
如果设置了这段代码,每次编译打包后会对应不同手机设备CPU的包,或者通过 修改主工程build.gradle下的abiFilters 这种方式来完成。
然后是按照屏幕密度拆分(项目中没用到):
splits {
//配置基于屏幕密度的APK
density {
//配置是否要创建基于屏幕密度的APK
enable true
//排除指定的屏幕密度
exclude “ldpi”, “xxhdpi”, “xxxhdpi”
// Specifies a list of compatible screen size settings for the manifest.
compatibleScreens ‘small’, ‘normal’, ‘large’, ‘xlarge’
}
}
打包时重命名
android {
applicationVariants.all{variant->
variant.outputs.each{output->
if(variant.buildType.name.equals(‘release’)) {
def oldFile = output.packageApplication.outputFile
def newName = ‘deliver’+’_’+getDate()+’_release.apk’;
output.packageApplication.outputFile = new File(oldFile.parent, newName)
}
}
}
}
加快编译构建速度
为了加快编译构建的速度,在网上搜索了一些设置:
aaptOptions { //不检查png的合法性
cruncherEnabled false
}
项目依赖
在dependencies下面,项目依赖有以下形式:
compile 所指编译内容可以是本地的,也可以是远程(jCenter)中的。如果是本地的包,最好以aar形式给出
compile files 编译的是jar包
compile project 编译的内容必须包含多有java代码、xml布局文件、AndroidManifest等,而且还要在项目的setting.gradle中用include的形式声明引用
PS. gradle dependencies 命令可以查看所有依赖库
- gradle打包常见文件问题整理:
Error:Could not find com.android.tools.build:gradle:2.2.2. Searched in
the following locations:
不能引用gradle2.2.2 的第三方包,对我而言,在build。gradle里面加入了jcenter()这句话就解决了。
或者,在我的dependencies中显示地声明classpath ‘com.android.tools.build:gradle:2.2.2’