AndroidStudio工程中的build.gradle中的buildTypes、productFlavors的多构建、多渠道打包APK
程序员文章站
2024-01-10 23:54:22
...
buildTypes与productFlavors联合配置Module
buildTypes:构建类型,在Gradle组件中,默认提供”debug”、”release”两个配置,分别是调试与发布,在不同配置中我们可以对其进行设置,例如,当发布APP时,我们希望自己的APP发布到应用平台上不被别人给**,所以我们需要在配置中写入minifyEnabled true来混淆我们的APP代码,然后在其中设置我们混淆的配置文件
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
proguard-android.txt是SDK中默认的混淆配置文件,proguard-rules.pro是项目中自带的自定义混淆配置文件
productFlavors:产品渠道,是不提供任何默认配置,在实际发布中,我们可以设置多个不同渠道,分别在其中写入配置、例如我现在有款产品,这款产品我们可以当外包的方式复制给其他公司,但是其他公司不可能所有的功能以及后台服务等信息和你一样,所以需要在产品渠道中设置相应的属性(QQ、后台Url等),这样就可以根据不同公司的情况设置不同的属性来打包出不同的apk文件
一般app的build.gradle
//表示该module是一个app module,应用了com.android.application插件
apply plugin: 'com.android.application'
//如果是一个android library,那么上面应该是apply plugin:'com.android.library'
android {
//设置编译的sdk版本
compileSdkVersion 23
//设置编译工具的版本
buildToolsVersion 23.0.3
//library在打包的时候不只是打release包,同样会把其他类型的时候包打出来,其中包括debug包
publishNonDefault true
//默认配置,如果后面没有覆盖,则使用默认配置中的设置
defaultConfig {
//向下兼容最小的sdk版本
minSdkVersion 15
//是否分步,现在随着Android项目的越来越大,一个工程中可能引入多个包,这样就会使项目的方法个数超过65536个,当超过这个数时,而你又没对进行分步设置与配置,则会出现1-1中的错误
multiDexEnabled true
}
//声明后面的构建类型
configurations {
debug
innerTest
releaseTest
release
}
//分别对构建类型的具体进行设置
buildTypes {
debug {
minifyEnabled false
shrinkResources false
……
}
innerTest {
minifyEnabled false
shrinkResources false
……
}
releaseTest {
minifyEnabled false
shrinkResources false
……
}
release {
minifyEnabled false
shrinkResources false
……
}
}
//产品渠道
productFlavors {
//下面是具体公司对应渠道,在其中可以写入相对应的设置,
jianhang {
buildConfigField "String", "QQ", '"XXXXXXXXX"'
buildConfigField "String", "WEIXIN", '"XXXXXXXXXXXXXX"'
……
}
nonghang { …… }
shanghang { …… }
//针对不同的情况还可以分别处理,如果是在library中,这里就是libraryVariants.all
applicationVariants.all { variant->
//当产品渠道是jianhang时,我们可以对其进行设置
if(variant.flavorName.contains('jianhang')) {
……
}
//当构建类型是innerTest时,我们可以对其进行相应的测试
else if(variant.buildType.name.equals('innerTest')) {
buildConfigField "String", "QQ", '"XXXXXXXXX"'
……
}
buildConfigField "String", "WEIXIN", '"XXXXXXXXXXXXXX"'
}
}
}
//下面是写你的Module所依赖的包和下一个Module的启动的构建类型和产品渠道等等
dependencies {
//所依赖的包
compile fileTree(include: '*.jar', dir: 'libs')
compile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
compile 'com.android.support:appcompat-v7:24.1.0'
compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4'
//构建其他所依赖的Module的构建方式,如果此Module的构建方式是什么,则设置所依赖的Module为相应的构建类型
//例如下方的release,则所依赖的Module的构建类型也是release,当然你也可以设置为其他的构建类型,path是Module的名字,configuration是构建类型
releaseCompile project(path: ':XXXXXXX', configuration: 'release')
debugCompile project(path: ':XXXXXXXX', configuration: 'debug')
innerTestCompile project(path: ':XXXXXXXX', configuration: 'innerTest')
releaseTestCompile project(path: ':XXXXXXXX', configuration: 'releaseTest')
}
1-1:
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536
在AndroidStudio中,我们可以通过Build Variants在其中设置,然后就可以根据不同的构建类型与产品渠道构建出不同的APK
上一篇: JAVA实现AES加密
下一篇: php 垃圾回收机制-写时复制跟引用计数