Android开发Android开发经验谈Android技术知识

1.6.2 APP的签名与打包

2018-05-27  本文已影响68人  常思行

一、签名的作用

众所周知,Android以包名作为唯一标识,如果在一台手机上安装两个包名相同的应用,那么后面安装的应用就会覆盖掉前面的应用,为了避免这种情况的发生,Android要求对作为产品发布的应用进行签名。

也就是说,数字签名是用来标识应用程序的作者和在应用程序之间建立信任关系的,不是用来决定最终用户可以安装哪些应用程序的。当然了,这个数字签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。

总之,它的作用有两个:
  • 确定发布者身份(避免应用被替换)
  • 确保应用的完整性(签名会对程序中的每个文件进行处理,从而确保程序包中的文件不会被替换)

二、使用Android Studio进行签名

从开始到现在我们一直都是通过 AndroidStudio来将程序安装到手机上的,而它背后实际的工作流程是:
-> AndroidStudio会将程序代码打包成一个 APK 文件
-> 然后将这个文件传输到手机上
-> 最后再执行安装操作

下面我们进行应用签名的操作

从上到下的选项依次为:

设置APK存储路径界面
该界面用于设置生成签名后的APK的存储路径,点击“Finish”,Android Studio会在指定路径生成一个签名后的APK安装包。

不过打包Android APK的方法还有很多,比如:命令行、Gradle、ANT、MAVEN等,方法有很多且各有各的好处,这次我们只用最简单的通过图形化界面打包签名的方式,简洁明了、大方直观!

三、Gradle多渠道打包

由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这再也不是事了。

以友盟统计为例,在AndroidManifest.xml里面会有这么一段:

<meta-data
    android:name="UMENG_CHANNEL"
    android:value="Channel_ID" />

里面的Channel_ID就是渠道标示。我们的目标就是在编译的时候这个值能够自动变化。

<meta-data
    android:name="UMENG_CHANNEL"
    android:value="${UMENG_CHANNEL_VALUE}" />
android { 
    productFlavors {
        xiaomi {}
        _360 {}
        baidu {}
        wandoujia {}
    } 

    productFlavors.all { 
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] 
        }
    }

然后直接执行 ./gradlew assembleRelease,然后就等待打包完成吧。

assemble 这个命令,会结合 Build Type 创建自己的task,如:
  • ./gradlew assembleDebug

除此之外 assemble 还能和 Product Flavor 结合创建新的任务,其实 assemble 是和 Build Variants 一起结合使用的,而** Build Variants = Build Type + Product Flavor **, 举个例子大家就明白了:

至此,一个完整的APK制作流程就此宣告完成,欢迎关注后续文章详细的讲解。

上一篇 下一篇

猜你喜欢

热点阅读