• 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.优缺点

    优点:安全

    缺点:速度慢

  • 相关阅读:

    IT人的素质 & 设计杂谈
    结构化思维思维的结构
    [WM].NET CF下如何提高应用程序的性能 【转载】
    无题
    [WM]谁抢走了应用程序的性能? 【转载】
    繁体编码文本文件转换为简体编码的工具
    生成VB多行字符串常量的工具
    跟我一步一步开发自己的Openfire插件
    cnblogs博文浏览[推荐、Top、评论、关注、收藏]利器代码片段
  • 原文地址:https://www.cnblogs.com/edensyd/p/8855780.html
Copyright © 2020-2023  润新知