打包之前建议学习:​​Android Studio系列之代码混淆proguardFiles​​

  • 普通的apk打包

Build->Generate Signed Bundle/APK

Android Studio打包apk_.net


如果已经拥有apk密钥,则选择已经存在的密钥,然后输入密码信息即可,否则创建密钥Create new…。

Android Studio打包apk_.net_02


Android Studio打包apk_apk打包_03


记得好好保管密钥文件和密码额。以上设置好了就点击Next,

Android Studio打包apk_apk打包_04


此时查看Event Log窗口,查看输出信息,点击locate可以跳转到apk文件位置。

Android Studio打包apk_apk打包_05

  • 分渠道打包
    不错,我们需要用到分渠道打包,那么我们需要解决两个问题
  1. 怎么区分各个平台的标识
  2. 怎么每次版本更新都生成几十个包、几百个包
    第一个简单,用过友盟打包的同学肯定不陌生这段代码
<meta-data android:name="UMENG_CHANNEL" android:value="Channel_ID"></meta-data>

value里面填的就是各个平台的值,比如填写uc、yyb(应用宝)、360、baidu替换掉Channel_ID,App安装好,可以读取这个值然后传给后台,从而实现区分各个平台的安装需求。

实现:
1.在AndroidManifest.xml中增加meta-data

/*${channelName} 是对应build.gradle文件中的channelName的值
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [channelName: name]
}
关于manifestPlaceholders 占位符我们稍后讲解
*/
<meta-data
android:name="UMENG_CHANNEL"
android:value="${channelName}" />

2.修改app模块下的build.gradle文件,在android空间内增加如下内容

apply plugin: 'com.android.application'

def releaseTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}

android {

defaultConfig {
applicationId "com.xxx.demo2"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
flavorDimensions "default"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

signingConfigs {
config {
keyAlias 'key0'//别名
keyPassword '123456'//密码
//秘钥位置
storeFile file('E:\\work\\android\\RocketBrowser\\SourceCodes\\app\\key0.jks')
storePassword '123456'//存储密码
}
}

//配置编译选项
buildTypes {
release {
debuggable false
minifyEnabled true
shrinkResources true
signingConfig signingConfigs.config
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}

debug {
debuggable true
minifyEnabled false
shrinkResources false
signingConfig signingConfigs.config
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}

productFlavors{
baidu{}
xiaomi{}
huawei{}
qihu360{}
}

productFlavors.all {
flavor -> flavor.manifestPlaceholders = [channelName: name]
}

applicationVariants.all { variant ->
variant.outputs.all {
def fileName = "Rocket_${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
outputFileName = fileName
}
}
}
//defaultConfig 需要配置flavorDimensions,否则会报错
flavorDimensions "default"

配置文件修改之后,在android studio 的Terminal窗口,执行​​gradlew assembleRelease​​,此时就会正常编译并且打包,生成的文件在app->build->outputs->apk目录下。

Android Studio打包apk_apk打包_06


使用​​gradlew assembleRelease​​的时候可能会提示JAVA_HOME没有设置,此时我们到环境变量设置一下信息,然后重启android studio:

Android Studio打包apk_apk打包_07


配置系统变量Path:

Android Studio打包apk_android_08

Android Studio打包apk_apk打包_09

渠道配置也可以通过窗口设置

Android Studio打包apk_android_10

eg:修改秘钥信息:

Android Studio打包apk_.net_11


eg:修改渠道信息

Android Studio打包apk_android_12