Android Studio3.0前后使用signingConfigs打包APK小記

在此記錄一下Android Studio3.0前后打包的一些區(qū)別,以及在打包時debug和release版本如何使用同一個keystore。

在第三方sdk調試如微信支付等操作時,debug版本的apk會因為keystore與release的不同而無法吊起微信支付、登錄、授權等服務。因為一般我們在微信開發(fā)者平臺注冊的keystore是release版的,只有與微信開發(fā)者平臺一致才能使用微信相關的服務操作。

最好還是把當前項目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 存放私密配置
以上就可以基本實現(xiàn) gradle 的設置,但是如果我們要將我們的項目上傳到 Github ,或者要將項目發(fā)送給別人。上面有些私密的東西就會被別人看到。比如:.jks 文件的密碼。

在項目跟目錄下,有個 local.properties 文件,我們可以使用它來存放一些私密的屬性,然后在 gradle 中讀取,而 local.properties 文件不需要上傳。


keystore.png

keystore1.png

keystore2.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容