使用Gradle生成apk文件
1.在gradle.properties文件中添加如下内容:
KEY_PATH=D\:\\Documents\\ein.jks
KEY_PASS=1234567
ALIAS_NAME=Ein
ALIAS_PASS=1234567
其中从上至下依次为签名keystore文件的路径,密码,别名,别名密码。
2.编辑app/build.gradle文件,在android闭包中添加如下内容:
signingConfigs {
config {
storeFile file(KEY_PATH)
storePassword KEY_PASS
keyAlias ALIAS_NAME
keyPassword ALIAS_PASS
}
}
3.再编辑app/build.gradle文件,在buildTypes闭包中添加signingConfig使用上述配置
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
}
4.最后生成APK文件
打开右侧工具栏的Gradle→项目名→:app→Tasks→build,其中assembleDebug用于生成测试版的APK文件,assembleRelease用于生成正式版的APK文件,assemble用于生成测试版和正式版的APK文件。在生成APK文件之前,先要双击clean这个Task来清理一下当前项目。
PS:生成的文件在app/build/outputs/apk目录下
生成多渠道APK文件
1.编辑app/build.gradle文件,在android闭包中添加productFlavors闭包:
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.xxxx.xxxxx.xxxxxx"
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
flavorDimensions "mode"
productFlavors {
demo {
dimension "mode"
applicationIdSuffix ".demo"
versionNameSuffix "-demo"
}
full {
dimension "mode"
applicationIdSuffix ".full"
versionNameSuffix "-full"
}
}
...
}
这里先声明了一个名为“mode”的维度,然后添加了productFlavors闭包,我们只用在该闭包中添加所有的渠道配置即可。
在这里我先添加了两个渠道,分别为demo和full。每一个渠道名的闭包中都可以覆写defaultConfig中的任何一个属性。以demo渠道为例,我先设置它是“mode”维度下的一个渠道,然后设置它包名后缀为“.demo”以及版本名后缀为“-demo”。
这么一来我们在生成APK的时候就有两个选择:生成demo渠道的APK,或者生成full渠道的APK。
2.维度的作用
上面有声明维度“mode”,因为两个渠道在同一维度下,因此看不出维度的作用。这里我再添加一个维度“size”以及两个渠道“small”和“large”,如下:
flavorDimensions "mode","size"
productFlavors {
small {
dimension "size"
}
large {
dimension "size"
}
demo {
dimension "mode"
applicationIdSuffix ".demo"
versionNameSuffix "-demo"
}
full {
dimension "mode"
applicationIdSuffix ".full"
versionNameSuffix "-full"
}
}
这么一来在生成APK的时候就有四个选择:(mode维度的渠道数*size维度的渠道数)
3.生成APK的多个渠道都准备好了,那么如何保证各渠道之间代码差异同时存在呢?其实只用在app/src目录下新建渠道目录即可。
比如要修改demo渠道的特有需求,那么我们就在app/src下新建一个demo目录(与main平级),然后在demo目录下新建java和res这两个目录,这样我们就可以在这里编写demo渠道特有的功能了。java用于存放代码,res用于存放资源,如果还要覆写AndroidManifest文件中的内容,就在demo目录下再新建一个AndroidManifest.xml文件即可。