如何优雅的给你的APK文件打上签名
历经千兴万苦开发Android应用后,将这个应用打包成APK文件发布到应用商店就可以让用户下载安装到他们的手机上。当然,不是所有的APK都能安装到手机上,Android系统要求只有签名后的APK文件才可以安装,因此我们还需要对生成的APK文件进行签名才行。
在开发时,Android Studio使用了一个默认的keystore文件帮我们自动进行了签名,点击Android Studio右侧工具栏的Gradle→项目名→:app→Tasks→android,双击signingReport,结果如下:
通过通过Android Studio来运行的程序都是使用了这个debug.keystore文件来进行签名的,所以开发的应用程序能直接安装在模拟器上或是测试用机上,但对于要正式发布的Android应用来说,用正式的keystore文件来签名才显得得体(一本正经的胡说八道)
说到这里,那么如何给你的APK文件来个优雅的签名?
用吃饭家伙签名(Android Studio)
既然Android Studio能使用默认的keystore文件自动给APK文件签名,那它也可以用来生成正式的keystore文件来给APK文件签名。
点击Android Studio导航栏上的Build→Generate Signed Bundle/APK,选择APK选项,点击OK,则会弹出下面的对话框:
还没有正式的keystore文件,点击Create new按钮,会弹出新的对话框,然后在这个对话框填写必要信息就可以了
在Validity那一栏填写的是keystore文件的有效时长,单位是年,一般建议时间可以填得长一些。
完成之后点击OK,回到上层对话框,刚才填写的信息会填充到创建签名APK的对话框中。点击Next,会出现下面的对话框:
选择APK输出目录以及Build Version,点击Finish就可以了,等一会就可以在输出目录下找到这个APK文件,这个APK文件就是带有正式签名的。
还是用吃饭家伙签名(Gradle)
Android Studio很强大,可以帮我们给APK签名,当然,Gradle也可以这么做,要用Gradle生成带有正式签名的APK文件需要在app/build.gradle文件中的android闭包中添加如下内容:
android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "cn.chenjianlink.android.coolweather" minSdkVersion 23 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } signingConfigs { config { storeFile file('C:/Users/Administrator/Documents/chenjian.jks') storePassword '123456' keyAlias 'chenjiandev' keyPassword '123456' } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' signingConfig signingConfigs.config } } }
- 在android闭包中添加了一个signingConfigs闭包,然后在signingConfigs闭包中又添加了一个config闭包。接着在config闭包中配置keystore文件的各种信息,storeFile用于指定keystore文件的位置,storePassword用于指定密码,keyAlias用于指定别名,keyPassword用于指定别名密码。
- 在buildTypes下面的release闭包中应用了刚才添加的签名配置,这样当生成正式版APK文件的时候就会自动使用刚才配置的签名信息来进行签名了
build.gradle文件已经配置完成,接下来点击右侧工具栏的Gradle→项目名→:app→Tasks→build
assembleDebug用于生成测试版的APK文件,assembleRelease用于生成正式版的APK文件,assemble用于同时生成测试版和正式版的APK文件。在生成APK之前,先要双击clean这个Task来清理一下当前项目,然后双击assembleRelease,这样APK文件会自动生成在app/build/outputs/apk目录下
目前keystore文件的所有信息都是以明文的形式直接配置在build.gradle中的,这样就不太安全。Android推荐的做法是将这类敏感数据配置在一个独立的文件里面,然后再在build.gradle中去读取这些数据。Android Studio项目的根目录下有一个gradle.properties文件,它是专门用来配置全局键值对数据的,将相关信息写入这个文件中,然后在build.gradle文件中引用
KEY_PATH=C:/Users/Administrator/Documents/chenjian.jks KEY_PASS=123456 ALIAS_NAME=chenjiandev ALIAS_PASS=123456
android { ... signingConfigs { config { storeFile file(KEY_PATH) storePassword KEY_PASS keyAlias ALIAS_NAME keyPassword ALIAS_PASS } } ... }