在此记录一下Android Studio3.0前后打包的一些区别,以及在打包时debug和release版本如何使用同一个keystore。
在第三方sdk调试如微信支付等操作时,debug版本的apk会因为keystore与release的不同而无法吊起微信支付、登录、授权等服务。因为一般我们在微信开发者平台注册的keystore是release版的,只有与微信开发者平台一致才能使用微信相关的服务操作。
最好还是把当前项目jks文件放于当前项目根目录下
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
// buildToolsVersion '27'//可以用高版本的build-tool去构建一个低版本的sdk工程
defaultConfig {
applicationId "com.***"
minSdkVersion 19
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
//debug和release版本配置使用同一个jks,便于微信支付调试
//------------------------方式 1 -----------------------------
// release {
// //.jks文件放在MyView项目根目录下
// storeFile rootProject.file('../keyStore.jks')
// storePassword "123456"
// keyAlias "keyStoreAlias"
// keyPassword "123456"
// }
// debug {
// //.jks文件放在项目根目录下
// storeFile rootProject.file('../keyStore.jks')
// storePassword "123456"
// keyAlias "keyStoreAlias"
// keyPassword "123456"
// }
// buildTypes {
// 默认不做更改
// }
//------------------------方式 1 -------------end----------------
//------------------------方式 2 -----------------------------
//方式2中注意buildTypes { }里的配置写法
appkey {
//myviewkey.jks文件放在MyView项目根目录下
storeFile rootProject.file('../keyStore.jks')
storePassword "123456"
keyAlias "keyStoreAlias"
keyPassword "123456"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.appkey
}
debug {
signingConfig signingConfigs.appkey
}
}
//------------------------方式 2 -------------end----------------
productFlavors {
}
buildToolsVersion '28.0.1'
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
//更改apk打包后的名称,Android studio3.0之前
// android.applicationVariants.all {
// variant ->
// variant.outputs.each {
// output -> output.outputFile = new File(output.outputFile.parent, "ljy_" + defaultConfig.versionCode + "_v" + defaultConfig.versionName + "_" + buildType.name + ".apk");
// }
// }
//更改apk打包后的名称,Android studio3.0之后,这里需要注意的是不能换行书写outputFileName
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "myview_" + defaultConfig.versionCode + "_v" + defaultConfig.versionName + "_" + buildType.name + ".apk"
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
implementation 'com.android.support:design:27.+'
implementation 'com.android.support:support-v4:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
testImplementation 'junit:junit:4.12'
}
repositories {
mavenCentral()
}
——2019-08-08修订
其中如遇WARNING: API 'variantOutput.getPackageApplication()' is obsolete and has been replaced with 'variant.getPackageApplicationProvider()'. It will be removed at the end of 2019.
是应为有些时候defaultConfig.versionCode、defaultConfig.versionName已经被variant.versionCode、variant.versionName取代,强行使用会报错;
——2020-6-6更新
使用 local.properties 存放私密配置
以上就可以基本实现 gradle 的设置,但是如果我们要将我们的项目上传到 Github ,或者要将项目发送给别人。上面有些私密的东西就会被别人看到。比如:.jks 文件的密码。
在项目跟目录下,有个 local.properties 文件,我们可以使用它来存放一些私密的属性,然后在 gradle 中读取,而 local.properties 文件不需要上传。