Android之打包签名
一、什么的是打包?
打包就是根据签名和其他标识生成安装包。
二、什么是签名?
1.在android应用文件(apk)中保存的一个特别字符串
2.用来标识不同的应用开发者:开发者A,开发者B
3.一个应用开发者开发的多款应用使用同一个签名
> 就好比是一个人写文章,签名就相当于作者的署名。
> 如果两个应用都是一个开发者开发的,那么签名就是一样的。
> 这个开发者,可以是个人,也可以是公司、团体。
三、为什么要用签名
原因1:最简单直接的回答:系统要求的
Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的!
原因2:
不同程序员开发的应用包名可能会相同,导致一个应用覆盖另一个应用。
举例:比如微信上线以后,我们可以通过一些简单的方式就能查看到它的包名,这个时候你也开发了一款app,应用的图标、名称与包名与微信一致,那么用户在不知情的情况下载你的应用,因为包名的原因会覆盖之前的微信,如果这时你在你的应用中写入了病毒,那么就会对用户就会产生很大的影响,这也是为什么需要签名的原因,因为每一个开发者的签名都是不同的,并且都经过加密,即使你的app的图标、名称与包名与微信一致,那么在安装的过程中,系统也会提示用户,有两个包名相同,但签名不同的应用。
四、签名丢失的危害
如果你的签名丢失了,那么用户安装时会先卸载之前的应用的才能安装成功,并且应用市场上的排行也会从0开始,这对一个app来说的伤害无疑是巨大的。
五、如果实现数字签名(下面的讲解主要针对于AS)
如果之前没有那么就创建一个
这里指定一个文件名:注意:在as中,签名文件keystore类型的文件变为jks格式的文件
Alisa表示别名
这里的Build Type有两个值 release:表示发布版 debug:测试版
点击finish等一会就会自动的生成了。默认在as工程中bin下生成的apk也有签名,但是不要用那个,用我们自己设置的apk
六、可能出现的异常
错误信息:
Error:(16) Error: "baidutieba_client_inavailable" is not translated in "en" (English) [MissingTranslation]
Error:(63) Error: "baidutieba" is not translated in "en" (English) [MissingTranslation]
Error:(67) Error: "share_to_baidutieba" is not translated in "en" (English) [MissingTranslation]
解决办法:那个文件出问题,就在那个文件中加如下的代码
<?xml version="1.0" encoding="utf-8" ?>
<resources
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MissingTranslation">
</resources>
七、多渠道打包(友盟多渠道打包)
什么是多渠道打包以及为什么使用多渠道打包?
1.渠道包就是要在安装包中添加渠道信息,也就是channel,对应不同的聚道,例如:小米市场、360市场、应用宝市场等
2.多渠道打包意义在于方便后进行统计。
八、有盟多渠道打包的实现
1.在manifest文件中添加如下的代码
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
2.在module的build.gradle的android{}中添加如下的内容
productFlavors{
wandoujia{
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
xiaomi{
manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"]
}
}
3.优化1:
productFlavors{
wandoujia{
//manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
xiaomi{
//manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"]
}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
4.优化2(使用这种方式可以在我们的生成的apk中看到版本号)
productFlavors{
wandoujia{
//manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
xiaomi{
//manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"]
}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk")
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
5.获取渠道
private String getChannel() {
try {
PackageManager pm = getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
return appInfo.metaData.getString("UMENG_CHANNEL");
} catch (PackageManager.NameNotFoundException ignored) {
}
return "";
}
6.在上面几部执行以后再进行签名,等待一会,这个时候你去工程所以目录下,就会看到自动打好的渠道包了
7.优缺点
优点:安全
缺点:速度慢
Android之打包签名的更多相关文章
- eclipse 和 android studio 打包签名apk问题
首先,我使用eclipse打包了一个签名apk 然后,我使用同一个签名文件在android studio 打包同一个项目 接下来,首先安装eclipse 打包的apk,然后安装android stud ...
- Android Studio 打包签名教程
android studio apk第三方加固与签名,混淆打包 https://jingyan.baidu.com/article/f25ef2545386af482c1b828f.html Andr ...
- Android Studio打包签名全过程
Step1:Build-----Generate Step2:签名文件保存位置,习惯性的保存在项目的根目录下E:\Users\StudioProject\SmartHust\smarthust.jks ...
- Android Studio 打包签名发布New Key Store
Key store path:存放路径 Key Alias:别名 Validity(years):有效期 Certificate:证书 First and Last Name: Organizatio ...
- Android打包签名
Ⅰ.用jdk和sdk自带工具打包签名 a.把jdk下的keytool.exe和jarsigner.exe所在目录(两个工具在同一目录) 添加到环境变量path 1)新建环境变量package,pack ...
- android 打包签名
1.Eclipse工程中右键工程,弹出选项中选择 android工具 → 生成签名应用包 2.选择需要打包的android项目工程 3.如果已有私钥文件,选择私钥文件 输入密码,如果没有私钥文件见第6 ...
- 【Android - 进阶】之代码打包签名与混淆
代码打包签名 Android Studio为大家集成了代码打包混淆的功能,具体操作流程如下组图所示: 1.点击Android Studio上方工具栏的 Build -> Generate Si ...
- android app调试没问题,但打包签名的apk,运行时出现闪退怎么办?
在用Eclipse编写Android app时,有时调试时没有问题,但一经打包签名,运行就出现闪退,还报错说找不到某某类.一开始以为是混淆导致的,后来我没有混淆竟然也还是这个问题.无奈只得网上寻找解决 ...
- Android proguard混淆签名打包出现"android proguard failed to export application"解决方案
刚刚接触安卓,不是很熟悉.发现之前可以正常打包的项目出现添加混淆再进行打包签名的APK之后提示"android proguard failed to export application&q ...
随机推荐
- Mapreduce实战:序列化与反序列化 int,int[],string[][]
最新一期<中国IT产业发展报告>在2016中国(深圳)IT领袖峰会上正式发布,数字中国联合会常务理事李颖称.中国IT产业完毕了从要素驱动向效率驱动的过渡,眼下正在由效率驱动向创新驱动发展. ...
- mongoDB之监控工具mongostat及其参数的具体含义
mongostat是mongdb自带的状态检测工具,在命令行下使用.它会间隔固定时间获取mongodb的当前运行状态,并输出.如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mon ...
- 01 json方式封装通信接口
新建一个json_api.php<?php class Response{ /** *按json方式输出通信 *@param integet $code 状态码 *@param string $ ...
- centos6.4中文输入法安装和切换(转载)
1.用root登录,或者切换到root账户(su root): 2.yum install "@Chinese Support"; 3.exit: 4.System→prefere ...
- 《AndroidStudio有用指南》反馈问题和建议
<AndroidStudio有用指南>反馈问题和建议 IntelliJ IDEA在持续更新, Android Studio也在持续更新, 本书也将会持续更新. Android Studio ...
- 2-3-4树的java实现
一.什么是2-3-4树 2-3-4树和红黑树一样,也是平衡树.只不过不是二叉树,它的子节点数目可以达到4个. 每个节点存储的数据项可以达到3个.名字中的2,3,4是指节点可能包含的子节点数目.具体而言 ...
- Aspose.cells 读取Excel表中的图片问题
一.说明 本文主要是讲解,怎么使用aspose.cells读取Excel表中的图片,并把图片转换成流或是image对象. 二.开发环境说明 开发工具vs2012,c#语言, 三.Aspose.cell ...
- 组件的详细说明和生命周期ComponentSpecs and Lifecycle
render ReactComponent render() render() 方法是必须的. 当调用的时候,会检测 this.props 和 this.state,返回一个单子级组件.该子级组件可以 ...
- linux SVN 安装配置
svn服务器有2种运行方式 1.独立服务器 (例如:svn://xxx.com/xxx):2.借助apache.(例如:http://svn.xxx.com/xxx):为了不依赖apache,选择第一 ...
- Jquey模糊选择
Jquey模糊选择 属性字头选择器(Attribute Contains Prefix Selector): jQuery 属性字头选择器的使用格式是 jQuery(‘[attribute|=va ...