6.2 APP的签名与打包

来源:互联网 发布:windows ndk下载 编辑:程序博客网 时间:2024/05/29 07:54

联系方式:

简书:WillFlow
CSDN:WillFlow
微信公众号:WillFlow

一、签名的作用

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

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

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

二、使用Android Studio进行签名

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

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

  • 通过 “Build -> Generate Signed APK…” 打开签名引导界面:
    签名引导界面

  • 若系统中还没有数字证书,可以在上图中点击 “Create new…” 按钮,然后填写数字证书的存储路径和密码:
    数字证书设置界面

    从上到下的选项依次为:

    • 数字证书存储路径
    • 密码与确认密码
    • 数字证书别名
    • 密码与确认密码
    • 数字证书有效期(以年为单位)
    • 作者名称
    • 单位名称
    • 组织名称
    • 所在城市
    • 所在省份
    • 所在国家
  • 填写完成后点击“OK”按钮,并在刚才的引导界面使用该数字证书,然后点击“Next”弹出如下对话框:

设置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就是渠道标示。我们的目标就是在编译的时候这个值能够自动变化。

  • 第一步 在AndroidManifest.xml里配置PlaceHolder
<meta-data    android:name="UMENG_CHANNEL"    android:value="${UMENG_CHANNEL_VALUE}" />
  • 第二步 在build.gradle 设置productFlavors
android {     productFlavors {        xiaomi {}        _360 {}        baidu {}        wandoujia {}    }     productFlavors.all {         flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]         }    }

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

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

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

  • 如果我们想打包wandoujia渠道的release版本,执行如下命令就好了:
    ./gradlew assembleWandoujiaRelease

  • 如果我们只打wandoujia渠道版本,则:
    ./gradlew assembleWandoujia
    此命令会生成wandoujia渠道的Release和Debug版本

  • 同理我想打全部Release版本:
    ./gradlew assembleRelease
    这条命令会把Product Flavor下的所有渠道的Release版本都打出来。

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

微信公众号:WillFlow