构建的APK文件根据用途分为调试类型(Debug)和发布类型(Release)两种,在前一篇文章中使用Android Studio执行签名方式的APK文件生成,这篇文章介绍使用gradle命令行生成的方式。
根据使用用途和是否有签名的区别,使用Android Studio可以构建如下APK文件
APK类别 用途 签名 缺省apk文件 签名调试版APK 调试(Debug) 无 app-debug.apk 签名发布版APK 发布(Release) 无 app-release.apk 事前准备这里使用Android Studio 3.5.3中创建的Demo应用进行使用说明。详细可参看:
- https://liumiaocn.blog.csdn.net/article/details/103573366
通过修改gradle构建脚本,也可以直接通过Android Studio都可以达到相同的效果,可以通过gradle的命令行直接执行构建生成所签名方式的APK,这里面最重要的就是需要让gradle了解到keystore文件的位置和相关的设定密码,而通过如下的图形界面操作,则可在Android Studio中直接配置签名的信息。
事前确认修改之前的gradle配置文件信息如下所示:
apply plugin: 'com.android.application' android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "com.liumiao.dmo" minSdkVersion 15 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' manifestPlaceholders = [:] } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'com.google.android.material:material:1.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' }步骤1: 打开Project Structure界面
在Android Studio的File菜单下选择Project Structure菜单项,打开Project Structure界面可以设定调试版和发布版的相关设定。
界面如下所示
选中Modules下的Signing Configs选项,分别设定release和debug用于对应调试版和发布版的keystore信息。release相关设定如下:
debug相关设定如下:
点击OK或者Apply之后gradle的配置文件中即会增加signingConfigs的设定,熟悉gradle和Android的配置,不通过界面直接修改配置文件当然也是相同效果。
注:此处使用的key store均为前文创建的信息,详细说明可参看前面的文章。
步骤3: 设定Default Config
如下图所示设定Default Config下的Signing Config为release方式
apply plugin: 'com.android.application' android { signingConfigs { debug { storeFile file('/Users/liumiao/AndroidStudioProjects/Demo/keyReleaseV2.jks') storePassword 'liumiaocn' keyPassword 'liumiaocn' keyAlias = 'release_v2_private_key' } release { keyAlias = 'release_v2_private_key' storePassword 'liumiaocn' keyPassword 'liumiaocn' storeFile file('/Users/liumiao/AndroidStudioProjects/Demo/keyReleaseV2.jks') } } compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "com.liumiao.dmo" minSdkVersion 15 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" signingConfig signingConfigs.release } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' manifestPlaceholders = [:] } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'com.google.android.material:material:1.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' }执行构建 清除构建结果
执行命令:./gradlew clean
liumiaocn:Demo liumiao$ pwd /Users/liumiao/AndroidStudioProjects/Demo liumiaocn:Demo liumiao$ ./gradlew clean BUILD SUCCESSFUL in 0s 2 actionable tasks: 2 up-to-date liumiaocn:Demo liumiao$构建签名方式发布版APK
执行命令:./gradlew assembleRelease
liumiaocn:Demo liumiao$ pwd /Users/liumiao/AndroidStudioProjects/Demo liumiaocn:Demo liumiao$ ./gradlew assembleRelease BUILD SUCCESSFUL in 14s 26 actionable tasks: 25 executed, 1 up-to-date liumiaocn:Demo liumiao$ find . -type f |grep apk ./app/build/intermediates/apk_list/release/mainApkListPersistenceRelease/apk-list.gson ./app/build/outputs/apk/release/output.json ./app/build/outputs/apk/release/app-release.apk liumiaocn:Demo liumiao$构建签名方式调试版APK
执行命令:./gradlew assembleDebug
liumiaocn:Demo liumiao$ ./gradlew assembleDebug BUILD SUCCESSFUL in 4s 24 actionable tasks: 24 executed liumiaocn:Demo liumiao$ find . -type f |grep apk ./app/build/intermediates/apk_list/release/mainApkListPersistenceRelease/apk-list.gson ./app/build/intermediates/apk_list/debug/mainApkListPersistenceDebug/apk-list.gson ./app/build/outputs/apk/release/output.json ./app/build/outputs/apk/release/app-release.apk ./app/build/outputs/apk/debug/output.json ./app/build/outputs/apk/debug/app-debug.apk liumiaocn:Demo liumiao$