gradle学习二


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"包。

你可能感兴趣的:(android,Studio)