AndroidStudio 项目混淆、打包、签名、发布一条龙

前言

本篇文章介绍的是一个 AndroidStudio 项目完成之后,发布到各大应用市场所需要的所有操作,当然,也可能不是很全

正文

android 项目发布到各大应用市场一般分为四个步骤:混淆、打包、签名、发布,本篇文章就针对这四步进行分析总结!

一、混淆

混淆的目的是为了防止我们的 APP 被反编译,从而泄漏源码,而混淆也不是绝对的,世上无难事,只怕有心人呐!

1. modul 级别的 build.gradle中的 release 节点下的为混淆配置,如下所示:
1
2
3
4
5
6
7
8
buildTypes {
release {
//是否开启混淆
minifyEnabled false
// 前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

以上代码,是项目刚刚建立时的默认的混淆配置,而我们要发布到应用市场,一般需要改成如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def releaseTime() {
return new Date().format("yyyy.MM.dd", TimeZone.getTimeZone("UTC"))
}
android {
buildTypes {
debug {
// 显示Log
buildConfigField "boolean", "LOG_DEBUG", "true"
//// apk包名称后缀,用来区分release和debug
versionNameSuffix "-debug"
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.debug
}
release {
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
// 混淆
minifyEnabled true
// Zipalign优化
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources true
// 前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
//修改输出文件名称
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出apk名称为appname-1.0-release-xxxx-xx-xx.apk
def fileName = "app-${defaultConfig.versionName}-release-${releaseTime()}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
}
}
2. proguard-rules.pro ( 自定义的混淆文件 )

在上边的 1 中 有这样一行代码:

1
2
// 前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

这个文件就是自定义的混淆文件,我们可以编辑里边的内容,改变我们项目的混淆配置,这些配置是固定的,网上能搜到很多,我就直接附上几条不错的链接:

混淆到此结束!

二、打包 - 多渠道打包

现在大大小小的 Android 应用市场大概有 100 多家,这也是要多渠道打包的原因,我们可以根据自己的需要,打包为不同应用市场的 APK ,配置方式如下:以友盟统计为例

1. 登录 友盟 官网,注册账号,在产品栏里找到 应用统计 ,点击之后,点击立即使用,在左下方有个添加新应用,然后获取 AppKey !
2. 在 app 的 build.gradle 文件中添加以下配置:
1
2
3
dependencies {
compile 'com.umeng.analytics:analytics:latest.integration'
}
3. 在 AndroidManifest.xml 中配置 AppKey (第一步中获取的 AppKey)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//添加所需的相关权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
//在 application 节点下添加,需要把 AppKey 替换掉,其他不需要改
<meta-data
android:name="UMENG_APPKEY"
android:value="AppKey" />
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
</application>
4. 在 app 的 build.gradle 设置 productFlavors

实际上就是针对不同应用市场的 apk 的设置,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
android {
//注意是在 android 节点下
productFlavors {
googleplay {}
huawei {}
xiaomi {}
wandoujia {}
baidu {}
yingyongbao {}
android360 {}
uc {}
umeng {}
meizu{}
//批量配置
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
}

当然也可以添加其他的应用市场!

5. 在 AndroidStudio 下方 有个 Terminal 命令行输入,在其中输入命令 gradlew assembleRelease ,然后就静静等待完成,完成后如下所示:

image

这是还未签名的 apk

还有一些其他的命令:

1
2
3
gradlew assembleRelease //创建新任务打包所有渠道包的release版本apk
gradlew assembleDebug //创建新任务打包所有渠道包的debug版本apk
gradlew assemblebaiduRelease //创建新任务打包指定渠道包(百度)的release版本apk

本人在这里碰到一个问题:

打包失败提示: Unsupported major.minor version 52.0

解决方法:将 JDK 换为 1.8 并更改环境变量配置,然后重启 AndroidStudio ,重新打包,成功!

三、签名

要想把 apk 发布到各大应用市场,签名是必须的,签名就像版权一样,证明这是谁开发的!操作如下:

==第一种方式:==

1. 在 AndroidStudio 的菜单栏上依次选择 Build -> Generate Signed APK

image
image

我这上边是已经有了一个签名文件

2. 如果没有签名文件就点击 Creat new…

image

各个选项的含义为

1
2
3
4
5
6
7
8
9
Key store path:密钥库文件的地址
Password/Confirm:密钥库的密码
Alias:密钥名称
Password/Confirm:密钥密码
Validity(years):密钥有效时间,一般默认25年
First and Last Name:密钥颁发者姓名
Organizational Unit:密钥颁发组织
City or Locality:城市
Country Code(XX):国家代码
3. 点击下方 OK 之后就回到了第一步的界面

image

4. 点击 Next

image

5. 点击 Finish 之后,就会在保存的路径内找到对应的 apk

==第二种方式:==

在 app 的 build.gradle 中的 android 节点下添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
signingConfigs {
debug {
keyAlias 'nicai'
keyPassword 'nicai'
storeFile file("nicai.jks")
storePassword 'nicai'
}
release {
//key别名
keyAlias 'nicai'
//key密码
keyPassword 'nicai'
//密钥文件路径
storeFile file("nicai.jks")
//密钥文件密码
storePassword 'nicai'
}
}

四、发布到各大应用市场

首先要去各大应用市场的平台注册开发者,需要身份证等证明照片!

1. 上传,需要准备一些必备的东西
  • 签名过的apk(要保存好生成的证书,下次更新的时候要用);

  • 图标icon,必备的是1616,和512512这两种尺寸。其他的也可以准备;

  • App截图:准备3~5张,基本每个平台都需要;

  • 应用介绍:用几十个字简短介绍你的App,基本每个平台都需要;

  • 当前版本介绍:介绍你当前的版本或者更新版本的一些情况,如修复了哪些bug等等;

  • 应用的分类:这个你事先想好你的App是属于哪种类型的;

  • 应用关键字:选3~5个关键字描述你的App;

  • 如果是公司开发者的话还需要营业执照和法人执照。

2. 认领

每个应用市场需要的东西并不完全一样,但是一般只要有公司营业执照,代码截图,apk,基本都能认领成功

3. 审核

各大应用市场的审核规则不是完全一样,很多都要求不能有广告,审核时间也不一样,有的快,有的慢,多联系客服!

至此,完结,欢迎指正!