第十五章的主要内容是 App 应用的一些收尾工作,比如打包,上架之类的事情。
一、生成正式签名的 APK 文件
AndroidStudio 将应用程序安装到手机的流程:首先将程序代码打包成一个 APK 文件,然后将文件传输到手机上,最后再执行安装操作。Android 系统会将所有的 APK 文件识别成应用程序的安装包,类似于 Windows 系统上的 .exe 文件。
但是并不是所有的 APK 文件都能成功安装到手机上,Android 系统要求只有签名后的 APK 文件才可以安装,那为什么通过 AndroidStudio 运行程序的时候并没有进行签名操作?因为Android Studio 使用了一个默认的 keystore 文件帮我们自动进行了签名。
双击它
我们通过 Android Studio 来运行的程序都是用这个 debug.keystore 文件来进行签名的。那么如何生成一个正式的签名呢?
使用Android Studio生成
使用 Android Studio 来生成正式签名的 APK 文件。
使用 Gradle 生成
我们还可以使用 Gradle 方式来生成。编辑 app/build.gradle
文件
android {
...
signingConfigs{
config{
storeFile file('F:/workspace/demo/CoolWeather/coolweather.jks')
storePassword '123456'
keyAlias 'coolweather'
keyPassword '123456'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//别忘了这一行,添加签名配置
signingConfig signingConfigs.config
}
}
...
}
配置完成,如何生成 APK 文件呢?
想要哪个就双击哪个,哪里不会点哪里。成功后 APK 文件会自动生成在
app/build/outputs/apk
目录下
生成的 APK 文件如果有一个包含 unaligned 字样,表示是没有经过对齐的 APK 文件,我们直接忽略它就可以了。
这里还有个小细节了解一下,目前 keystore 文件的所有信息都是以明文的形式直接配置在 build.gradle 中的,这样不太安全,Android 推荐的做法是将这类敏感数据配置在一个独立的文件里面,然后再 build.gradle 中去读取这些数据。
修改该文件
KEY_PATH=F:/workspace/demo/CoolWeather/coolweather.jks
KEY_PASS=123456
ALIAS_NAME=coolweather
ALIAS_PASS=123456
然后修改 app/build.gradle
文件
signingConfigs{
config{
storeFile file(KEY_PATH)
storePassword KEY_PASS
keyAlias ALIAS_NAME
keyPassword ALIAS_PASS
}
}
我们只需要将 gradle.properties 文件保护好久行了,比如从 Git 版本控制中排除。
二、生成多渠道 APK 文件
比如我们准备要生成 360 和百度两个渠道的 APK 文件,修改app/build.gradle
文件
android {
...
defaultConfig {
applicationId "com.coolweather.android.coolweather"
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "1.0"
jackOptions.enabled = true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
productFlavors{
qihoo{
applicationId "com.coolweather.android.coolweather.qihoo"
}
baidu{
applicationId "com.coolweather.android.coolweather.baidu"
}
}
...
}
注意: Gradle 中的配置规定不能以数字开头,因此我将 360 的渠道配置成了 qihoo。渠道名的闭包中可以覆写 defaultConfig 中的任何一个属性,比如说这里讲 applicationId 属性进行了覆写,那么最终生成的各渠道 APK 文件的包名也各不相同。
假如我们需要对不同的渠道编写差异性需求。在 app/src 目录下(main的平级目录)新建一个 baidu 目录,然后再 baidu 目录下在新建 java 和 res 两个目录。
这样我们就可以编写百度渠道特有的功能了,如果需要覆写 AndroidManifest 文件中的内容,还可以在 baidu 目录下再新建一个 AndroidManifest.xml 文件。我们这里演示一下给不同渠道的 APK 起一个不同的应用名字吧。
应用名之前是定义在 main/res/values/string.xml 文件中的,我们在 baidu 目录下也建立一个相同的目录结构,然后进行修改:
<resources>
<string name="app_name">酷欧百度版</string>
</resources>
然后生成多渠道 APK 文件,观察右侧工具栏的 Gradle Tasks 列表,你会发现里面多出了几个新的 Task。
如果需要生成百度渠道的 APK 文件,就执行 assembleBaidu,同理想生成 360 渠道的 APK 文件,就执行 assembleQihoo,如果想一次性生成所有渠道的 APK 文件,就执行 assembleRelease。除了 Gradle 方式生成之外,还可以使用 Android Studio 提供的可视化工具也能生成多渠道的 APK 文件。
生成后,就可以通过
adb install
命令将生成好的 APK 文件安装到模拟器上。adb install APK文件路径
注意:因为我们在 productFlavors 中覆写了各渠道的 applicationId 属性,保证每个 APK 文件的包名都不相同,因而它们可以安装到同一个设备上面。
三、上架360市场
360应用商店的地址是:http://dev.360.cn
,首先你要注册,然后登陆,然后根据步骤来进行上架,这里就不赘述了。
注意:360应用商店有个特殊需求,是需要对 APK 进行加固,在上架页面 360 会帮我们将 APK 进行加固并生成一个新的 APK 文件,但是这个加固后的文件是没有经过签名的,我们需要下载下来进行重新签名。
遗憾的是,Android Studio 中没有提供对未签名的 APK 直接进行签名的功能,我们只能使用 jarsigner 命令来进行签名:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [keystore 文件路径] -storepass [keystore 文件密码] [待签名 APK 路径] [keystore 文件别名]
将[]中的描述替换成 keystore 文件的具体信息就能签名成功了,注意[]符号是不需要的。
四、嵌入广告进行盈利
谷歌充分考虑到了可以在 Android 应用程序中嵌入广告来让开发者获得收入,在国内,这一领域做的比较好的移动广告平台不少,个人认为腾讯广告联盟(原广点通)特别专业。
网址是:http://e.qq.com/dev/index.html
,你需要先注册账号,然后填写一些个人信息。待他审核通过后,我们就可以进入腾讯广告联盟的后台,给我们的应用添加广告,首先进入媒体管理界面,新建媒体,填写应用相关信息,注意这里需要填写一个详情页地址,我们可以使用360应用商店上的详情页地址,打开http://zhushou.360.cn
,搜索我们的 app,就能找到该地址了。
填写完成后,我们需要下载 Android SDK,在此期间,如果我们的审核通过后,可以在媒体管理界面查看新建媒体的状态,注意,这里自动生成了一个应用 ID,稍后会用到。
然后点击新建广告位,就可以创建一个广告位了,创建完成后,进入广告位管理界面,能看到我们刚刚新建的广告位了,同样,广告位 ID 也是我们稍后会用到的。
以上工作都完成后,我们开始接入 SDK,现将 jar 包复制到你的项目中,然后根据文档来进行剩下的操作。
接入完成后,我们要重新发布一下应用,修改一下app/build.gradle文件。
然后进行更新上架。此后,每当有用户观看或点击了应用程序中的广告时,我们就能真正地得到收益,在腾讯广告联盟的后台管理界面可以查看每天的收益情况。
五、结束语
已经接近尾声了,通过这一系列的学习,只能说你具备了一定的 Android 开发技术,但并不是说你就已经成为一个出色的 Android 开发者,你必须还要通过不断的努力和学习来充实完善自己。因为 Android 的世界还很大很深很广。