1。包package的唯一Id:
使用Gradle,可以轻松的修改app的包名,代码如下:
productFlavors {
pro {
applicationId = "com.example.my.pkg.pro"
}
free {
applicationId = "com.example.my.pkg.free"
}
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
在正式打包时,会打包两个包,分别为包com.example.my.pkg.pro和包com.example.my.pkg.free,但是调试的时候会给包追加一个.debug字符!这个debug的可以不添加!
2。Gradle 基本编译命令:
a>assemble :输出debug.apk和release.apk
b>assembleDebug :输出debug.apk
c>assembleRelease:输出release.apk
3.用Android Studio编译系统的逻辑
示例一:这个构建脚本展示了怎样用一个动态的函数往输出结果里注入一个动态versionCode
def getVersionCode() {
def code = 1 //随便写的个值
return code
}
android {
defaultConfig {
versionCode getVersionCode()
…
}
}
示例二:在调试过程中给package名和versionName名加个debug字符:
android {
buildTypes {
debug {
packageNameSuffix ‘.debug’
versionNameSuffix ‘-DEBUG’
}
beta {
…
}
}
}
4资源压缩:
注意:资源压缩要和类似Proguard的代码压缩工具相结合才有作用!
为了能够使资源压缩,更新buildTypes脚本块,添加minifyEnabled、shrinkResources、proguardFiles属性,如下所示:
android {
...
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
5.过滤资源
1. 过滤语言资源
在build.gradle 文件中,使用resConfig属性,来针对app的本地化开发进行资源过滤。当app工程依赖appcompat-v7和google-play-services_lib时非常有用。
例如:本地化语言资源只限en, de, 和es:三种可以这么写:
apply plugin: 'android'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
minSdkVersion 8
targetSdkVersion 22
versionCode 1
versionName "1.0"
resConfigs "en", "de", "es" //Define the included language resources.
}
...
2. 过滤图片资源
下面的代码,本地化图片资源只限定MDPI和HDPI
android {
defaultConfig {
...
resConfigs "mdpi", "hdpi"
}
}
6.代码混淆
在Android Studio中,代码混淆写在build.gradle文件下,通过minifyEnabled属性设置是否支持混淆,代码如下:
android {
buildTypes {
release {
minifyEnabled true
proguardFile getDefaultProguardFile('proguard-android.txt')
}
}
productFlavors {
flavor1 {
}
flavor2 {
proguardFile 'some-other-rules.txt'
}
}
}
分析:minifyEnabled 为true,即支持混淆,发布版本flavor1使用默认的混淆文件,发布版本flavor2使用some-other-rules.txt混淆文件
7.关于lint的部分
使用lint进行代码审查,这个功能在Eclipse也有!在进行gradle运行时,会展示出系统认为是错误的解决方案,这是非常有用的!但是,也可以在build.gradle 的脚本中设置lint的使用!
android {
lintOptions {
// set to true 通过lint,打印出一些分析报告!
quiet true
// if true, 如果发现错误,将停止编译
abortOnError false
// if true, 仅仅报告错误的地方
ignoreWarnings true
}
8.优化gradle的编译速度
可以通过两种途径:
一种是:在build.gradle文件里,修改javaMaHeapSize 的值
dexOptions{
javaMaxHeapSize'6g'
}
```意思是将JavaMaxHeapSize 的值扩大到6G
另一种是在运行gradle脚本时加上 --daemon ,例如:
<div class="se-preview-section-delimiter"></div>
这里写代码片
“`
注:还有一部分,是关于资源合并(Resource merging)的,由于现在还没有弄懂,弄懂后会补上的,如果您了解,希望不吝赐教,多谢!
gradle build --daemon
意思是执行 build 任务
注:还有一部分,是关于资源合并(Resource merging)的,由于现在还没有弄懂,弄懂后会补上的,如果您了解,希望不吝赐教,多谢!