11.Unity打包安卓-设置相关-PublishingSettings-密钥管理器
11.1 讲解PublishingSettings前的准备知识
前言
我们将要讲解安卓平台 Player Settings 当中的 Publishing Settings(发布设置)相关的内容,要讲解这块内容,我们必须了解一些基本的概念知识:
Android 中的签名是什么?
Android 中的签名是什么?Android要求所有已安装的应用程序都使用数字证书做数字签名,数字证书的私钥由应用开发者持有,Android使用证书作为标示应用程序作者的一种方式,并在应用程序之间建立信任的关系。证书并不用来控制用户能否安装哪个应用。证书不需要由证书认证中心签名;完全可以使用自制签名证书。
没有正确签名的应用,Android系统不会安装或运行。此规则适用于在任何地方运行的Android系统,不管是在模拟器还是真实设备上。因为这个原因。在真机或模拟器上运行或者调试应用前,必须为其设置好签名。
为什么要使用签名?
上图是我们在Unity中发布Android应用程序时,设置的包名
开发Android的人这么多,完全有可能把包名命名成同样的名字,这个时候该如何区分?
这时就需要签名来区分了,由于开发商可能通过使用相同的Package Name(包名)来混淆替换已经安装的程序,签名可以保证相同名字,但是签名不同的包不被替换。
举例:
比如应用程序A 和 应用程序B 的包名是相同的,如果没有签名的存在,在同一Android设备上重复安装A和B,就会导致他们之间的彼此覆盖,不能同时拥有,为了避免这种情况出现,就有了签名机制。
我们之后在讲解Publishing Settings(发布设置)中提到的安卓密钥库和密钥,就是用来进行Android签名的。
Android 应用程序清单是什么?
Android应用程序工程中,有一个叫做 AndroidManifest.xml 的xml文件,该文件在之后的开发中我们会经常使用和编辑,该配置文件主要用于声明应用程序的组件,并且还有以下的一些重要作用:
确定应用程序要求的用户权限,比如:网络访问、通讯录访问、信息读取等权限
声明应用程序要求的最低API Level
声明应用程序将要使用的或要求的硬件和软件特性,比如:摄像头访问、蓝牙服务、多点触碰等
等等
也就是说,如果我们想要在安卓游戏当中使用一些系统功能或硬件访问权限,都需要在该文件当中进行设置。
Unity中如果引入Android第三方SDK,或者需要和Android进行交互,经常会对该文件进行编辑。如果我们没有这些需求,可以忽略它。
Gradle 是什么?
Gradle 是一个自动化构建开源工具,主要面向Java应用为主,也支持其它语言,比如C++、Kotlin、Swift,未来还会支持更多的语言。
它是一个基于JVM(Java虚拟机)的构建工具,是一款通用灵活的构建工具,也可以用于Android 项目的构建工作,它可以让安卓项目变得更加简洁。
在Unity中简单理解Gradle,它就是用于帮助我们打包出安卓应用程序 .apk 的一个工具,在Android Studio中也使用Gradle进行应用程序打包。
ProGuard 和 R8 是什么?
代码混淆
代码混淆(Obfuscated code),是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆主要用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。已经存在许多种功能各异的代码混淆器。
将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成单个字母,或是简短的无意义字母组合,甚至改写成“__”这样的符号,使得阅读的人无法根据名字猜测其用途。重写代码中的部分逻辑,将其变成功能上等价,但是更难理解的形式。比如将for循环改写成while循环,将循环改写成递归,精简中间变量,等等。打乱代码的格式。比如删除空格,将多行代码挤到一行中,或者将一行代码断成多行等等。
代码混淆的主要目的是提升源代码的安全性,别人反编译你的应用程序代码后,增加他们阅读分析逻辑的难度。
ProGuard 和 R8 就是两种不同的代码混淆器。
ProGuard
ProGuard是一个压缩、优化和混淆Java字节码(Java源代码通常被编译为字节码)文件的免费的工具,它可以删除无用的类、字段、方法和属性。可以删除没用的注释,最大限度地优化字节码文件。它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。常常在Android开发用于混淆最终的项目,增加项目被反编译的难度。
Unity发布安卓应用程序时,默认使用的就是ProGuard来进行处理最终的代码。
R8
R8是相对ProGuard较新的Android混淆编译器,它可以尽可能的减小应用的大小,早期的Android Studio版本中,混淆编译器使用的是ProGuard执行编译时的代码优化,如果我们使用Android Gradle 3.4.0或更高版本构建项目时,不再使用ProGuard进行代码优化,而是采用R8编译器协同工作。
Android Sutdio 3.3版本开始,就使用R8作为代码压缩器来对代码进行混淆、压缩、优化了。
R8 相对 ProGuard来说,它可以更快地缩减代码,同时改善输出的大小。
Unity发布安卓应用程序时,我们可以选择使用R8混淆编译器进行发布处理。
总结
我们需要大概了解了这些基本概念后,之后再讲解相关设置时,你才能知道我们是在设置什么内容。
11.2 知识点
可以通过密钥管理器创建、配置和加载密钥和密钥库
我们可以在Keystore Manager窗口或Publishing Settings 发布设置中加载现有密钥库和密钥。
下拉菜单
我们可以在该下拉菜单选择,创建新的密钥库,加载现有的密钥库
- Create New:创建新的密钥库
- Anywhere:任何地方,会打开项目文件夹根目录下的文件资源管理器,这是Unity存储密钥库的默认位置
- In Dedicated Location:专用位置,将密钥库文件保存到计算机中的另一个目录中
注意:为了协同开发方便,建议大家就把密钥库保存在项目文件夹下,避免其它同事无法访问密钥库
- Select Existing:选择现有密钥库
- 可以指定加载现有密钥库
Password:密钥库的密码
Confirm password:创建密钥库时 需要重复一次密码
Existing Keys:现有密钥
界面的这一部分包含当前密钥库包含的密钥的只读列表
New Key Values: 新键值(可以在此处在密钥库中添加密钥)
- Alias:密钥的标识名字 一般来说分不同厂商 比如huawei xiaomi
- Password:密钥的密码
- Confirm password:密钥的确认密码,必须和密码相同
- Validity(years):有效期(年),默认有效期为50年,一般设置较大就行,可以理解是你管理这个应用程序的有效时间
- First and Last Name:你的名字和姓氏
- Organizational Unit:你所在企业中的部门
- Organization:组织,管理你应用程序的组织,一般就是公司名
- City Or Locality:你个人所在的城市或地区
- State or Province:你个人所在的州或省
- Country Code(XX):你个人的国家代码,中国的国家代码为:86
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com