guardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
}
}
依赖管理
1、依赖 jcenter 包
每个库名称包含三个元素:组名:库名称:版本号
compile 'com.android.support:appcompat-v7:25.0.0'
2、依赖本地 module
compile project(':YibaAnalytics')
3、依赖 jar 包
- 1、把 jar 包放在 libs 目录下
- 2、在 build.gradle 中添加依赖
dependencies {
compile files('libs/YibaAnalytics5.jar')
}
4、依赖 aar 包
- 1、把 aar 包放到 libs 目录下
- 2、在 build.gradle 中添加依赖
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
compile(name:'YibaAnalytics-release', ext:'aar')
}
如图所示:
5、自定义依赖包目录
当我们的 aar 包需要被多个 module 依赖时,我们就不能把 aar 包放在单一的 module 中,我们可以在项目的根目录创建一个目录,比如叫 aar 目录,然后把我们的 aar 包放进去,如图所示:
在项目的根目录的 build.gradle 的 allprojects 标签下的 repositories 添加 :
flatDir {
dirs '../aar'
}
../aar
表示根目录下的 aar 文件夹。
如图所示:
然后就可以添加依赖了,如下所示:
compile(name:'YibaAnalytics-release', ext:'aar')
6、依赖配置
有些时候,你可能需要和sdk协调工作。为了能顺利编译你的代码,你需要添加SDK到你的编译环境。你不需要将sdk包含在你的APK中,因为它早已经存在于设备中,所以配置来啦,我们会有5个不同的配置:
- compile
- apk
- provided
- testCompile
- androidTestCompile
compile是默认的那个,其含义是包含所有的依赖包,即在APK里,compile的依赖会存在。
apk的意思是apk中存在,但是不会加入编译中,这个貌似用的比较少。
provided的意思是提供编译支持,但是不会写入apk。
native包(so包)
用c或者c++写的library会被叫做so包,Android插件默认情况下支持native包,你需要把.so文件放在对应的文件夹中:
注意
jniLibs 目录应该和 Java 目录在同一级
defaultConfig 详解
defaultConfig 对应的是 ProductFlavor 类。
resConfigs : 过滤语言
如果你的app中仅支持1,2种语言,但是可能引用的lib库包含多种其他语言的strings资源,这个时候我们可以通过resConfig指定我们需要的strings资源。
android {
defaultConfig {
applicationId "com.yiba.sharewe.lite.activity"
minSdkVersion 14
targetSdkVersion 24
versionCode 46
versionName "1.74"
resConfigs 'en', 'zh-rCN' ,'es' //本次打包,只把 en(英文)、zh-rCN(中文简体)、es(西班牙语)打进保内,其他语言忽略
}
}
resConfigs : 过滤 drawable文件夹的资源
一般情况下,我们打完包,res 下面的资源如图所示:
现在加上资源过滤规则:
android {
defaultConfig {
applicationId "com.wifi.analytics"
minSdkVersion 9
targetSdkVersion 25
versionCode 1
versionName "1.0"
resConfigs "hdpi" //打包的时候只保留 drawable-xhdpi 文件夹里面的资源
}
}
这次我们打包效果如下:
buildTypes 详解
官方文档
buildTypes{}对应的是 BuildType 类
继承关系
BuildType 继承 DefaultBuildType ; DefaultBuildType 继承 BaseConfigImpl ;
BaseConfigImpl
--- DefaultBuildType
--- BuildType
buildTypes的属性:
name:build type的名字
applicationIdSuffix:应用id后缀
versionNameSuffix:版本名称后缀
debuggable:是否生成一个debug的apk
minifyEnabled:是否混淆
proguardFiles:混淆文件
signingConfig:签名配置
manifestPlaceholders:清单占位符
shrinkResources:是否去除未利用的资源,默认false,表示不去除。
zipAlignEnable:是否使用zipalign工具压缩。
multiDexEnabled:是否拆成多个Dex
multiDexKeepFile:指定文本文件编译进主Dex文件中
multiDexKeepProguard:指定混淆文件编译进主Dex文件中
buildType的方法:
1.buildConfigField(type,name,value):添加一个变量生成BuildConfig类。
2.consumeProguardFile(proguardFile):添加一个混淆文件进arr包。
3.consumeProguardFile(proguardFiles):添加混淆文件进arr包。
4.externalNativeBuild(action):配置本地的build选项。
5.initWith:复制这个build类型的所有属性。
6.proguardFile(proguardFile):添加一个新的混淆配置文件。
7.proguradFiles(files):添加新的混淆文件
8.resValue(type,name,value):添加一个新的生成资源
9.setProguardFiles(proguardFileIterable):设置一个混淆配置文件。
initWith :复制属性
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.wifi.analytics"
minSdkVersion 9
targetSdkVersion 25
versionCode 1
versionName &qu