一、什么的是打包?

打包就是根据签名和其他标识生成安装包。

二、什么是签名?

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之打包签名的更多相关文章

  1. eclipse 和 android studio 打包签名apk问题

    首先,我使用eclipse打包了一个签名apk 然后,我使用同一个签名文件在android studio 打包同一个项目 接下来,首先安装eclipse 打包的apk,然后安装android stud ...

  2. Android Studio 打包签名教程

    android studio apk第三方加固与签名,混淆打包 https://jingyan.baidu.com/article/f25ef2545386af482c1b828f.html Andr ...

  3. Android Studio打包签名全过程

    Step1:Build-----Generate Step2:签名文件保存位置,习惯性的保存在项目的根目录下E:\Users\StudioProject\SmartHust\smarthust.jks ...

  4. Android Studio 打包签名发布New Key Store

    Key store path:存放路径 Key Alias:别名 Validity(years):有效期 Certificate:证书 First and Last Name: Organizatio ...

  5. Android打包签名

    Ⅰ.用jdk和sdk自带工具打包签名 a.把jdk下的keytool.exe和jarsigner.exe所在目录(两个工具在同一目录) 添加到环境变量path 1)新建环境变量package,pack ...

  6. android 打包签名

    1.Eclipse工程中右键工程,弹出选项中选择 android工具 → 生成签名应用包 2.选择需要打包的android项目工程 3.如果已有私钥文件,选择私钥文件 输入密码,如果没有私钥文件见第6 ...

  7. 【Android - 进阶】之代码打包签名与混淆

    代码打包签名 Android Studio为大家集成了代码打包混淆的功能,具体操作流程如下组图所示: 1.点击Android Studio上方工具栏的  Build -> Generate Si ...

  8. android app调试没问题,但打包签名的apk,运行时出现闪退怎么办?

    在用Eclipse编写Android app时,有时调试时没有问题,但一经打包签名,运行就出现闪退,还报错说找不到某某类.一开始以为是混淆导致的,后来我没有混淆竟然也还是这个问题.无奈只得网上寻找解决 ...

  9. Android proguard混淆签名打包出现"android proguard failed to export application"解决方案

    刚刚接触安卓,不是很熟悉.发现之前可以正常打包的项目出现添加混淆再进行打包签名的APK之后提示"android proguard failed to export application&q ...

随机推荐

  1. React项目结构

    任何一种语言.框架,在真正上手的时候,多多少少会想想怎么安排项目结构(正所谓磨刀不误砍柴工),React也不例外. google了下,拿下面3篇博客来说道说道. (1) how-to-better-o ...

  2. 理解DOMSTRING、DOCUMENT、FORMDATA、BLOB、FILE、ARRAYBUFFER数据类型

    一.XMLHttpRequest 2.0的家臣们 我大学那会儿,一个称为Ajax的东西对前端行业造成了深远影响,不仅是JS语言,而包括前端地位.职位兴起以及工作分工等.抛开IE6浏览器不谈,其他浏览器 ...

  3. 简单label控件 自制

    using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using ...

  4. mybatis学习总结(三)——增删查改

    映射器是mybatis的基础和核心,下面学习下映射器的使用 映射器的主要元素 select  查询语句,可以自定义参数和返回结果集 insert  插入语句,返回一个整数,代表插入的条数 update ...

  5. java基础知识查漏 二

    一.java基本数据类型所占的内存大小 在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符 单元的字符类型和1种用于表示真值的boolean类型.( ...

  6. request,session,application三者关系<转>

    几乎所有的Web开发语言都支持Session功能,Servlet也不例外. Servlet/JSP中的Session功能是通过作用域(scope)这个概念来实现的. 对象作用域为:  page  在当 ...

  7. Thumbelina,摘自iOS应用Snow White and more stories

    Once upon a time there was a woman who wanted to have a child. 从前,有个想要个孩子的女人. A witch heard her wish ...

  8. 大数据之ES系列——第一篇 ElasticSearch2.2 集群安装部署

    第一部分  安装准备 准备三台主机节点: hc11.spads  192.168.160.181 hc12.spads  192.168.160.182 hc13.spads  192.168.160 ...

  9. Codeforces Round #394 (Div. 2) B. Dasha and friends —— 暴力 or 最小表示法

    题目链接:http://codeforces.com/contest/761/problem/B B. Dasha and friends time limit per test 2 seconds ...

  10. linux系统配置之bash shell的配置(centos)

    linux系统开机启动过程的最后阶段会由init进程根据启动方案(运行级:0-6)启动许多基本的服务程序,为用户提供各种各样的服务.在启动这些服务的最后会启动一个为用户提供操作环境的服务,用户就是通过 ...