as中apk签名和多渠道打包
2015-12-06 17:09
253 查看
1.什么是签名:
数字签名就是为你的程序打上一种标记,来作为你自己的标识,当别人看到签名的时候会知道它是与你相关的
2.为什么要签名
防止盗版,app市场可以检测签名
未签名的apk无法安装,也没法发布到应用市场
包名相同,签名不同的apk无法升级覆盖
3.怎么签名
bulid-》generate signed apk,如果jks文件已经存在,选择即可,如果不存在,新建一个
4.jks文件的keystore密码,别名和私钥密码
JKS文件就好像一个仓库,仓库有一个密码,里面存放密钥,包括公钥和私钥,每个密钥都有一个别名,公钥通过别名就可以直接访问了,私钥还要对应一个密码,需要别名和密码两个参数才能获得
签名时的两个密码(key store密码和key 密码),即仓库密码和私钥密码。
5.release版和debug版的区别,如何在gradle中配置签名
区别:
release版本是没法在真机上断点调试的
debug版本默认有一个签名文件,release版本必须自己配置签名文件
配置的方法是在gradle中写配置信息,别名和两个密码都不能写错:
6.多渠道打包
基本原理是利用Gradle的 manifest merger 功能,这个功能的主要用途是能够在运行时替换AndroidManifest.xml里面的内容,具体功能大家自行查看文档吧,这里就不赘述了。
我用的是友盟的统计,所以现在AndroidManifest.xml里面会有这么一段:
里面的Channel_ID就是渠道标示。我们的目标就是在编译的时候这个值能够自动变化。
这里的作用有两个,一是声明
或批量:
所谓ProductFlavors其实就是可定义的产品特性,配合
上面这个配置的作用就是,为每个渠道包产生不同的
然后选择bulid-》generate signed apk,选择好签名文件后点击下一步,导出apk前可以选择需要生成的渠道包
数字签名就是为你的程序打上一种标记,来作为你自己的标识,当别人看到签名的时候会知道它是与你相关的
2.为什么要签名
防止盗版,app市场可以检测签名
未签名的apk无法安装,也没法发布到应用市场
包名相同,签名不同的apk无法升级覆盖
3.怎么签名
bulid-》generate signed apk,如果jks文件已经存在,选择即可,如果不存在,新建一个
4.jks文件的keystore密码,别名和私钥密码
JKS文件就好像一个仓库,仓库有一个密码,里面存放密钥,包括公钥和私钥,每个密钥都有一个别名,公钥通过别名就可以直接访问了,私钥还要对应一个密码,需要别名和密码两个参数才能获得
签名时的两个密码(key store密码和key 密码),即仓库密码和私钥密码。
5.release版和debug版的区别,如何在gradle中配置签名
区别:
release版本是没法在真机上断点调试的
debug版本默认有一个签名文件,release版本必须自己配置签名文件
配置的方法是在gradle中写配置信息,别名和两个密码都不能写错:
android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.qianfeng.zhouyi.picassodemo" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } signingConfigs { release { storeFile file("release.jks") storePassword "123456" keyAlias "release" keyPassword "123456" } } buildTypes { release { signingConfig signingConfigs.release } } }
6.多渠道打包
基本原理是利用Gradle的 manifest merger 功能,这个功能的主要用途是能够在运行时替换AndroidManifest.xml里面的内容,具体功能大家自行查看文档吧,这里就不赘述了。
我用的是友盟的统计,所以现在AndroidManifest.xml里面会有这么一段:
<meta-data android:name="UMENG_CHANNEL" android:value="Channel_ID" />
里面的Channel_ID就是渠道标示。我们的目标就是在编译的时候这个值能够自动变化。
第一步 在AndroidManifest.xml里配置PlaceHolder
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />
第二步 在模块的build.gradle文件的defaultConfig里加上PlaceHolder定义
android { ... defaultConfig { ... manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"default_channel" ] } }
这里的作用有两个,一是声明
UMENG_CHANNEL_VALUE是可替换值的PlaceHolder,二是为其设置默认值。
第三步 在模块的build.gradle文件里添加ProductFlavors配置
android { productFlavors { xiaomi { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] } _360 { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"] } baidu { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"] } wandoujia { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } } }
或批量:
android { ... defaultConfig { ... manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"default_channel" ] } productFlavors { default_channel{} wandoujia{} _360{} yingyongbao{} xiaomi{} baidu{} huawei{} jifeng{} } productFlavors.all { flavor -> flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ] } }
所谓ProductFlavors其实就是可定义的产品特性,配合
manifest merger使用的时候就可以达成在一次编译过程中产生多个具有自己特性配置的版本。
上面这个配置的作用就是,为每个渠道包产生不同的
UMENG_CHANNEL_VALUE的值。
然后选择bulid-》generate signed apk,选择好签名文件后点击下一步,导出apk前可以选择需要生成的渠道包
相关文章推荐
- 使用大白菜U盘安装原装window7系统的问题
- python--格式化打印杨辉三角(format)
- JS组件系列——Bootstrap寒冬暖身篇:弹出框和提示框效果以及代码展示
- 在Sublime Text 3中配置编译和运行C++程序
- 第十三周学习总结
- XMPP环境搭建
- 线程池中的ThreadGroup坑
- [LeetCode] Longest Valid Parentheses 解题思路
- 数据注解特性--Column
- 装饰者模式(包装模式)
- Xcode真机调试遇到The identity used to sign the executable is no longer valid
- 编程成长日记――求最大公约数
- 虫师----随笔分类 -selenium
- 拓扑排序杭电 1285确定比赛名次
- 读书笔记 -- 005_数据挖掘_度量数据的相似性和相异性
- Android批量打包提速 - 1分钟900个市场不是梦
- linux下配置tomcat虚拟目录
- Java环境变量的作用
- linux中cat、more、less、tail、head命令的区别
- 写给一位期望做得更好的大学生