前言:今天一个同事突然向我问到Android Studio 发布APK出现问题该怎么办,我解决了他的问题。然后想到既然如此,干脆就将自己掌握的一些关于发布APK的知识写出来,毕竟好记性不如烂笔头嘛!
一:发布APK的方式
二:直接打包流程
这里只要输入几个必要项
Key store path(生产key文件的保存路径 )
Key store password(key 存储密码)
Key alias(key别名)
Key password(key密码)
可以输入机构或个人名字
生成好keystore之后的步骤就和上面一样就可以了。
三:多渠道打包
众所周知Android Studio 的一大特色就是这个多渠道打包,我最开始放弃eclipse并选择AS就是看重这点儿。废话不多说,要想多渠道打包,那么我们就得先了解一下我们AS的核心gradle。
(1)什么是gradle
gradle是一种依赖管理工具,基于groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的领域(DSL)特定语言
(2)整个项目的gradle配置文件build.gradle
<span style="font-family:SimSun;">buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}</span>
内容主要包含了两个方面:一个是声明仓库的源,我这里用的是jcenter(),可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优比。另一个是声明了android gradle plugin的版本,android studio 2.0正式版必须要求支持gradle plugin 2.0+的版本。
(3)app文件夹下这个module的gradle配置文件,是整个项目中最重要的build.gradle
<pre name="code" class="java">apply plugin: 'com.android.application'
android {
//执行lint检查,有任何的错误或者警告提示,都会终止构建,我们可以将其关掉。
lintOptions {
abortOnError false
}
//签名
signingConfigs{
release{
keyAlias 'ztlkey'
keyPassword '732310'
//我这里是把jks放在了我的项目下面的keystore文件夹下,用相对路径
storeFile file('/keystore/android.jks')
storePassword '732310'
}
}
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.dingwei.testpushapk"
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
// dex突破65535的限制
multiDexEnabled true
}
buildTypes {
release {
//混淆
minifyEnabled false
//Zipalign优化
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources true
//前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//签名
signingConfig signingConfigs.release
}
debug{
signingConfig signingConfigs.release
}
}
//渠道Flavors,配置不同风格的app
productFlavors {
yingyongbao {
applicationId "com.test.push.yingyongbao"
}
xiaomi {
applicationId "com.test.push.xiaomi"
}
umeng {}
baidu {}
wandoujia {}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.1'
}
这个配置文件里面我基本都写了注释的,相信有点基础的读者也能看得懂productFlavors就是我们所谓的多渠道,在里面我们可以尽情的配置我们想要的东西,如果什么都没写,像上面的baidu{}这样,那么系统打包的时候就会用defaultConfig里面的配置。如果配置了一些东西,比如上面的yingyongbao{},那么它会优先用多渠道里面的配置,之后才是defaultConfig的配置。简单点就是productFlavors的优先级高于defaultConfig。
注意:我们进行多渠道打包的时候,如果每个渠道里面都需要用到不同的logo或者文字或者字体,那么我们该怎么才能做到呢?不要紧,下面为你详细解答。
1:举个简单例子比如 我yingyongbao这个渠道里面appname是“测试应用宝”,baidu这个渠道里面appname是 “测试百度”。这种情况下,我们必须要对appname也进行多渠道的配置(当然图片这些都可以,同理)。操作步骤如下:找到你的项目文件夹-->app-->src 在此文件夹里面两个文件夹一个yingyongbao,一个baidu(记住:此处的文件夹名称一定一定要和你productFlavors下面的名称一样)。因为我们这里只是修改appname,那么我就截了三张图,如下
相信聪明如你通过上面三张图片也知道该怎么去修改了吧。咳咳,我解释一下,我们看到的main这一张就是你项目的默认配置这些,里面包括代码,图片,以及其他的一些资源吧。我们要修改任何东西,就只需要把main复制一下,然后将文件夹名改成与productFlavors下面一样的,并且把我们需要修改的appname值改掉就行。其它的一些图片啊这些都是这么做的。
2.还有一种情况,比如我的多渠道里面都有微信支付的功能。那么问题来了,如果我们什么都不管,直接这样配置出来,打包之后你会发现支付成功之后它不会回调,这是为什么呢,原因很简单,微信支付它的回调默认是 包名.wxapi.WxPayEntryActivity这个类,我们多渠道之后并没有相关的配置,它就会找不到该文件夹。对于这种我们处理起来也很简单,操作如下:打开mainifest文件,将WXPayEntryActivity的声明改成下面这种方式就OK了。
<activity android:name="${applicationId}.wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
(4)多渠道打包
经过以上步骤终于是吧配置搞好了,接下来就是收获成功的时候了。多渠道打包有三种方式,一种 build-->generate signed apk... 和单渠道一样,之后会略有区别 单渠道
多渠道
选择我们需要的包 然后点击finish就万事大吉了。哈哈哈,弄了这么久,心情有点小激动。
另外两种我就小小提下:
1.用命令打包,找到AS底部栏的Terminal 然后指定到我们项目路径下 输入 gradlew assembleRelease (这是打真实包,打测试包就改为 assembleDebug)
2.用AS右侧的gradle打包,找到AS右侧的gradel,点开找到app-->build 这里面有 assembleDebug(所有的测试包) assembleRelease(所有的真实包) assembleBaidu(百度真实包) assembleYingyongbao(应用宝真实包).... 想打那个包就找到它双击就可以了,是不是很简单啊!
这种方式打好的包它的路径就在 项目文件下面 app-->build-->outputs里面
以上就是我所知道的AS发布APK的知识,有写得不好的地方请多包容,有写错的地方请指正出来(本人邮箱:844861961@qq.com),一切为了学习!