React-native 安卓(android)修改打包apk名

2,058 阅读1分钟

React-native android/ios 打包

完成后在 android/app/build/outputs/apk/release/文件夹中看到的apk包名称会是: app-release.apk

修改apk名称:

android/app/build.gradle 找到 buildTypes 添加以下代码

    buildTypes {
        release {
            // Caution! In production, you need to generate your own keystore file.
            // see https://facebook.github.io/react-native/docs/signed-apk-android.
            signingConfig signingConfigs.config
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"

            applicationVariants.all{ variant ->
              def buildName = variant.buildType.name
              variant.outputs.all { output -> 
                 def outputFile = output.outputFile
                 if(outputFile != null && outputFile.name.endsWith('.apk')){
                    if(buildName == 'debug'){
                        def fileName = "demo-debug.apk"  // 修改apk名称
                        outputFileName = fileName
                     } else if (buildName == 'release'){
                        def fileName = "demo.apk" // 修改apk名称
                        outputFileName = fileName
                     }
                 }
              }
            }
        }
    }

添加版本号

1.android/build.gradle 获取版本号

// 解析json
import groovy.json.JsonSlurper

...

// 读取package.json中的version版本号
def getNpmVersion() {
    def inputFile = new File("../package.json")
    def packageJson = new JsonSlurper().parseText(inputFile.text)
    return packageJson["version"]
}

def getNpmVersionArray() { // major [0], minor [1], patch [2]
    def (major, minor, patch) = getNpmVersion().tokenize('.')
    return [Integer.parseInt(major), Integer.parseInt(minor), Integer.parseInt(patch)] as int[]
}
subprojects {
    ext {
        def npmVersion = getNpmVersionArray()
         versionMajor = npmVersion[0]
        versionMinor = npmVersion[1]
        versionPatch = npmVersion[2]
    }
}

2.android/app/build.gradle 打包中带入版本号

buildTypes {
        release {
            // Caution! In production, you need to generate your own keystore file.
            // see https://facebook.github.io/react-native/docs/signed-apk-android.
            signingConfig signingConfigs.config
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"

            applicationVariants.all{ variant ->
              def buildName = variant.buildType.name
              variant.outputs.all { output -> 
                 def outputFile = output.outputFile
                 if(outputFile != null && outputFile.name.endsWith('.apk')){
                    if(buildName == 'debug'){
                        def fileName = "demo-debug.apk"
                        outputFileName = fileName
                     } else if (buildName == 'release'){
                        // 打包带入版本号
                        def fileName = "demo-${versionMajor}.${versionMinor}.${versionPatch}.apk" 
                        outputFileName = fileName
                     }
                 }
              }
            }
        }
    }

3.打包成果