Run ProGuard (混淆)
例子:
android { ... buildTypes { release { runProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), \ 'proguard-rules.txt' } } }
getDefaultProguardFiel('proguard-android-txt') 从android sdk中获取默认的混淆设置,Android studio在 root module中添加proguard-rules.txt来添加一些自定义的设置
Configure signing setting(签名设置)
debug和release版本的应用差别在于应用是否可以在安全的设备上调试以及APK是如何签名的。构建系统对debug版本的应用默认使用一个默认的key和certificate来避免在编译期间出现密码弹窗。对于release版本的打包,如果不明确指定签名设置,构建系统不会对APK进行签名
1. 将release key拷贝到app的根目录下,"app/"
2. 在app根目录下的build file中添加签名配置
... android { ... defaultConfig { ... } signingConfigs { release { storeFile file("myreleasekey.keystore") storePassword "password" keyAlias "MyReleaseKey" keyPassword "password" } } buildTypes { release { ... signingConfig signingConfigs.release } } } ...
3. 通过android studio或者命令行调用 "assembleRelease" 构建任务
在构建文件中直接保存打包密码不是个好措施,可以通过环境变量设置密码:
storePassword System.getenv("KSTOREPWD") keyPassword System.getenv("KEYPWD")
或者可以通过弹窗的方式获取密码:
storePassword System.console().readLine("\nKeystore password: ") keyPassword System.console().readLIne("\nKey password: ")
Work with build variants
这个不知道怎么翻译了,我个人理解这里是构建目标,跟xcode中的target有些相似。通过build variants可以对同一个工程,创建不同版本的应用,比如对于免费版和付费版,还有各个渠道的版本。构建系统使用"product flavors"来创建不同版本的应用,应用的不同版本可以有不同特性或者设备要求,构建系统会对应每个版本的应用生成不同的APK文件。
Build variants
每个版本的应用都是通过一个"build variants"在构建系统中表示的。build variants是build type 和 product flavor configuration来进行组合构成的,Android studio默认情况下,有debug和release两种build type,没有默认的 product flavor 设置。例如,定义了两个product flavor,demo和full,这时候,就会生成4个"build variants",对应地会生成4个APK文件。
- demo-debug
- demo-release
- full-debug
- full-release
Source directories
构建系统会从将下面的代码和资源进行结合来编译各个不同版本的App:
- src/main/ - 主要的源目录,对所有的variant都有用
- src/<buildType>/ - 各个不同build类型的源目录
- src/<flavorName>/ - 各个不同flavor类型的源目录
NOTE:需要注意的是,这些目录结构是可选的,如果你不自己创建目录,构建系统就不会使用这些目录。
对于源代码,每个build variant目录下面的源代码会组合在一起进行编译。如果两个目录下面的源代码不会包含在一个build variant中,你可以在这两个目录下面创建同名的文件。
对于manifest,构建系统会将所有的manifests文件合并为一个最终的manifest,对于每个build variant
都可以有不同manifest,即有定义不同的组件和权限。
对于资源文件,构建系统会将每个build variant所有目录下的资源合并到一起。对于同一个build variant,不同目录下面的同名资源,他们会按一定优先级进行覆盖,build type资源 > product flavor资源 > 主目录资源。
NOTE: 通过build variant,可以在不同版本的应用中,灵活重用很多东西,例如 activities,应用逻辑和资源文件等
Build output
可以通过Android Studio或者命令行来调用 "assemble" 任务。编译生成为每个 build variant 都生成一个APK文件: "app/build/apk"目录包含命名规则为 "app-<flavor>-<buildtype>.apk"包。