IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 详解android项目配置签名文件的完整流程 -> 正文阅读

[移动开发]详解android项目配置签名文件的完整流程

1.背景

接手的项目近期需要上线,于是复习了一下项目签名文件配置流程,这里做个系统性总结。

2.最终目标

根据需求为debug包与release包配置签名文件,快速满足中小型项目的需要。

3.创建签名文件

要将签名文件配置到项目中,首先需要创建一个签名文件。android studio为我们提供了图形化创建方式,这里简单赘述一下:

导航栏build下选择 generate signed bundle/apk,如下图:

QQ截图20210427151350.png

国内的就选择apk,点击next:

QQ截图20210427151520.png

点击 create new,创建一个新的签名文件:

QQ截图20210427151600.png

接下来需要填入一些信息,下面的截图简单解释了一下。其中,certificate下的六个填空题,做一个就可以了,这里建议应填尽填:

QQ截图20210427153617.png

填完之后,点击OK,进行创建,完事儿~ 等等?咋还报错了嘞?瞅瞅说的啥。。。

QQ截图20210427154512.png

哦~ 他让咱们用命令行迁移到行业标准格式,那来吧:复制一下警告弹窗里的那条命令(keytool -importkeystore......pkcs12),打开terminal终端,粘贴进去,点回车,走你~ 按照提示,输入源秘钥库口令,就是刚刚设置的密码,再回车,走你~ OK,到这里,签名文件就创建完成了。

QQ截图20210427154759.png

4.生成release与debug签名文件的配置信息

我们需要在app的build.gradle下生成测试包与正式包的配置脚本,来分别配置debug包与release包的不同属性,比如测试包与正式包都使用自己的签名文件、正式包开混淆但测试包不开等等,方便我们进行开发与上线。 android studio也为我们提供了图形化操作界面,下面一起来走一遍:

导航栏 file -> project structure,进到项目结构界面

QQ截图20210427161946.png

项目结构界面依次选择: modules -> app -> signing configs,如下图:

QQ截图20210427162829.png

点击“+”新增一个配置信息,输入release,代表这是用于正式包的签名文件信息,点击OK:

QQ截图20210427163308.png

QQ截图20210427163628.png

输入相关信息后,点击 apply,release包的签名文件就生成完毕了,同理,生成debug包的签名文件配置信息,用于日常开发与调试,这里建议与release包使用相同的签名文件,避免相同包名的debug版本与release版本,由于签名不同而重复卸载与安装(插个题外话:必须要让debug包与release包使用不同签名文件的小伙伴,可以采用给测试包追加包名的方式,避免正式包与测试包的包名冲突,这里先挖个坑【坑1】,下文来填上)。 release签名文件配置如图:

QQ截图20210427164118.png

debug签名文件配置如图:

QQ截图20210427164258.png

点击OK之后,等待项目配置完成,然后打开项目app目录下的build.gradle文件,我们可以看到,release包的签名信息与debug包的签名信息都已经生成,如图:

QQ截图20210427164400.png

但是目前为止,我们仅仅是生成了自己的两种签名文件信息,却还没配置到测试包与正式包里。那么怎么在编译测试包或者正式包的时候,让他们各自使用自己的签名文件信息呢?先别捉急,咱喝口茶缓一缓先。

5.将签名文件信息配置给对应的包

喝着茶咱也别闲着,来看一看app目录下build.gradle里面的buildType的信息:

QQ截图20210427172611.png

这个bulidType里,记录着项目的release包、debug包等各种包的配置。咱们可以看到,创建项目的时候,系统为咱们显式自动生成了release包的配置,但是只配置了两个值,这里简单解释一下:

  • minifyEnabled:是否开启混淆(debug模式默认为true,release模式默认false)
  • proguardFiles:混淆文件(仅在minifyEnabled为true时生效) OK,接下来咱们先配置release包的签名文件,依旧是打开项目结构界面,但是选择 build variants,如图:

QQ截图20210427172854.png

咱们看到,系统已经生成了一个release,这个就是正式包的配置文件,咱们这次只需要设置一下签名文件就OK了,别的设置可以自行了解。在signing config下选择设置的signingConfigs.release选项,点击apply来应用设置。 编译完成后,回到app目录下的build.gradle,查看buildTypes,如图:

QQ截图20210427180458.png

到这里,release包的签名文件便配置完成了。 接下来配置debug包的签名文件,依旧是打开项目结构界面创建变量界面(file-> project structure -> build variants ),选择app包:

QQ截图20210428100206.png

点击“+”号,输入debug,点击OK后,debug包的各项默认配置便显示出来了。

QQ截图20210428100401.png

咱们可以根据需要来更改这些配置,比如,Debuggable(应用是否可调试,底下解释【埋坑2】)默认值是true,这时候咱们可以显式的指定出来,就给它默认值改为手动设置的true,当然,这里不改也是没问题的。Debuggable如下图:

QQ截图20210428100458.png

【坑2】解释:debuggable,顾名思义,就是是否可调式,指的是应用在运行过程中,能否通过编译器进行调试,最直接的表现就是系统日志输出。默认情况下,release包下处于关闭模式,debug包处于开启模式,开发过程中,必要情况下可以更改该值来调试debug包或者release包。

配置debug包签名文件操作与配置release包的签名文件基本一样,找到 signing config,选择签名文件,然后点击apply来应用配置,最后OK,如下图:

QQ截图20210428103707.png

同步完成后,可以看到编译器已经为我们自动产生了debug包的配置信息,并应用了咱们自定义的签名文件:

QQ截图20210428100741.png

到这里,签名文件的基本配置流程已经讲完了,但是这样的配置是会产生签名文件信息的安全问题的。 在谈安全问题之前,咱们先填一填前面埋的【坑1】:关于在debug包追加包名的事儿。有兴趣的小伙伴来了解一下,没兴趣的可以跳下一小节了。 前面提到,为了避免测试包与正式包安装冲突,咱们可以使用两种方式,一种是上面的使用同一个签名文件,另一种是给测试包追加包名,让他们包名不同,从而避免包名冲突。android studio同样为我们提供了图形化追加包名的方式,甚至刚刚我们还见到过。

[ 黑人问号脸.jpg ]

不信你看截图:

QQ截图20210428105758.png

没错,就是在这里追加包名,比如我的demo的默认包名是com.dylan.signaturetest,我想让测试包的包名是com.dylan.signaturetest.debug,那么我只需要在这个application id suffix里添加“.debug”即可,如图:

QQ截图20210428110918.png

依次点击apply与OK后,等待同步完成,查看build.gradle的配置如下:

QQ截图20210428110154.png

可以看到,applicationIdSuffix属性已经被添加成功,这时候我们分别运行正式包与测试包,运行方式如图:

正式包运行方式截图

测试包运行方式截图

运行结果如图:

84ffa90b605e851c5e437a70bd3bccf.jpg

可以看到,两个包可以同时存在,查看包名,如图:

测试包包名截图

正式包包名截图

正如我们期望的那样,正式包与测试包同时存在了。 OK,上面埋的坑填完了,底下讲一讲上文提到的,签名文件信息安全问题。

6.将签名文件信息移动到项目本地配置文件

前面我们发现,签名文件的文件名、密码等极其敏感的信息,都是放在项目app包下的build.gradle里的,会随着项目的发包,一起发到各大应用市场,这样安装包被不怀好意的玩家们进行反编译后,轻而易举的就可以获取到我们的签名文件信息。除此之外,文件路径写在gradle里,在多端协作开发同一个项目的时候,大家的签名文件放置的位置五花八门,也会引起这里gradle文件的签名文件路径被多人频繁修改的问题。 为了避免这种情况,往往我们会将签名文件的配置信息单独在本地配置文件local.properties里,该文件在新建项目的时候,android studio会帮我们创建好,位于项目根目录下,在进行Git版本控制时,默认不会被添加到Git提交到远程仓库,在别人第一次拉取远程仓库代码时,只需要创建自己的local.properties文件即可。文件截图如下:

QQ截图20210428132122.png

可以看到,我们的android SDK路径就是在这里配置的,底下我们来编写代码,来实现从local.properties文件里读取签名文件信息。

首先,local.properties文件内指定签名文件路径、密码、别名、别名密码等信息,如图:

QQ截图.png

接着在app目录下的build.gradle文件的android下编写代码,读取local.properties文件,并读取指定的信息,如图:

QQ截图20210428135421.png

最后,将读取到的签名文件信息配置给signingConfigs内debug与release,如图:

QQ截图20210428135904.png

至此,签名文件从产生到配置的完整流程,算是已经讲完了。

7.总结

本文讲解了从零开始配置一个android项目签名文件的完整流程,通过阅读本文,我们可以对签名文件配置有一个整体的把握,后续配置签名文件也可以一文搞定。 由于笔者能力有限,文章难免出现错误,欢迎指正!

附录:相关源码

核心配置文件一共两点,即项目根目录下的local.properties与app目录下的build.gradle文件的android属性,分别如下:

local.properties

## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file should *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=C\:\\Users\\Dylan\\AppData\\Local\\Android\\Sdk
#
#签名文件配置信息
keyStoreFile=C\:\\Users\\Dylan\\Desktop\\signatureTest.jks
keyStorePassword=123456
keyAlias=key0
keyAliasPassword=123456

复制代码

使用的时候更换为自己的签名文件相关信息。

app//build.gradle

android {

    // 读取local.properties文件
    Properties properties = new Properties()
    InputStream inputStream = project.rootProject.file('local.properties').newDataInputStream()
    properties.load(inputStream)

    // 读取签名文件
    def keyKeyStoreFile = file(properties.getProperty('keyStoreFile'))
    // 读取签名文件别名、密码等信息
    def keyKeyStorePassword = properties.getProperty('keyStorePassword')
    def keyKeyAlias = properties.getProperty('keyAlias')
    def keyKeyAliasPassword = properties.getProperty('keyAliasPassword')


    signingConfigs {
        release {
            storeFile keyKeyStoreFile
            storePassword keyKeyStorePassword
            keyAlias keyKeyAlias
            keyPassword keyKeyAliasPassword
        }
        debug {
            storeFile keyKeyStoreFile
            storePassword keyKeyStorePassword
            keyAlias keyKeyAlias
            keyPassword keyKeyAliasPassword
        }
    }
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.dylan.signaturetest"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
            signingConfig signingConfigs.debug
            debuggable true
            applicationIdSuffix '.debug'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}
复制代码

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-28 12:30:08  更:2021-10-28 12:31:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:45:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码