Android开发学习StudioAndroid开发

AndroidStudio3.0下命令行打包自定义输出路径和输出

2018-02-26  本文已影响1056人  HannyYeung

新年伊始

过了雨水节气,天气渐暖,想到了一首非常喜欢的古诗:

王维 <<山居秋暝>>

空山新雨后,天气晚来秋.
明月松间照,清泉石上流.
竹喧归浣女,莲动下渔舟.
随意春芳歇,王孙自可留.

正题

之前写过一篇命令行打出多个应用包

这一次在之前的基础上,进一步加强,实现修改打包的名称,自定义输出apk地址

项目结构

image.png
在工程src目录下新建:comone comtwo两个文件夹,主要目的是为了实现打包出多个apk,当然我并没有在这两个文件夹里面添加任何东西,如果需要可以参考:命令行打出多个应用包

项目下的build.gradle 文件配置

//根据项目工程配置出不同的包
flavorDimensions "app"
productFlavors {
    comone {
        applicationId "com.huayi.one"
        dimension "app"
        versionCode 1
        versionName "1.0"
        signingConfig signingConfigs.comone
    }
    comontwo {
        applicationId "com.huayi.two"
        dimension "app"
        versionCode 1
        versionName "2.0"
        signingConfig signingConfigs.comtwo
    }
}

signingConfigs {
    comone {
        keyAlias 'huayi_one'
        keyPassword 'qq2016'
        storeFile file('D:\\ASDemo\\keyStore\\comone.jks')
        storePassword 'qq2016'
    }
    comtwo {
        keyAlias 'huayi_two'
        keyPassword 'qq2016'
        storeFile file('D:\\ASDemo\\keyStore\\comtwo.jks')
        storePassword 'qq2016'
    }
}

//定义一个装apk文件路径的数组
def fileArray = []
android.applicationVariants.all { variant ->
    variant.outputs.all { output ->
        def outputFile = output.outputFile
        if (outputFile != null && outputFile.name.contains('release')) {
            //获取每个打包产物
            def variantProd = variant.productFlavors[0]
            def fileName = "huayi_${variantProd.versionName}_${variantProd.versionCode}" + "_${variantProd.name}.apk"
            println "自定义输出apk的名字:" + fileName;
            outputFileName = fileName;
            println "输出apk地址:" + outputFile.parentFile.absolutePath + java.io.File.separator + fileName
            fileArray.add(outputFile.parentFile.absolutePath + java.io.File.separator + fileName);
        }

    }
}

build {
    doLast() {
        println "任务1编译打包完成后需要复制apk的数量:" + fileArray.size()
        forEachFile(fileArray)
    }
}

def forEachFile(fileArray) {
    fileArray.forEach { file ->
        //遍历进行文件操作
        println "任务3遍历apk文件"
        rename_and_moveout_apk(file)
    }
}


def rename_and_moveout_apk(orignalFile) {
    def intoFile = rootDir.parentFile.getAbsolutePath() + File.separator + "apk"
    copy {
        from orignalFile
        into intoFile
        println "任务4复制apk到指定位置:" + intoFile
        rename("${android.defaultConfig.versionName}_${android.defaultConfig.versionCode}_", "")
        println "任务5修改apk的命名"
    }
}

看看Terminal控制台结果

配置上面的一切之后,再AndroidStudio3.0 的Terminal中输入 : gradle build

贴出全部build.gradle,不留一点的

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.huayi.app"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    //定义一个装apk文件路径的数组
    def fileArray = []
    android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.contains('release')) {
                //获取每个打包产物
                def variantProd = variant.productFlavors[0]
                def fileName = "huayi_${variantProd.versionName}_${variantProd.versionCode}" + "_${variantProd.name}.apk"
                println "自定义输出apk的名字:" + fileName;
                outputFileName = fileName;
                println "输出apk地址:" + outputFile.parentFile.absolutePath + java.io.File.separator + fileName
                fileArray.add(outputFile.parentFile.absolutePath + java.io.File.separator + fileName);
            }

        }
    }

    lintOptions {
        abortOnError false
    }
    signingConfigs {
        comone {
            keyAlias 'huayi_one'
            keyPassword 'qq2016'
            storeFile file('D:\\ASDemo\\keyStore\\comone.jks')
            storePassword 'qq2016'
        }
        comtwo {
            keyAlias 'huayi_two'
            keyPassword 'qq2016'
            storeFile file('D:\\ASDemo\\keyStore\\comtwo.jks')
            storePassword 'qq2016'
        }
    }
    //根据项目工程配置出不同的包
    flavorDimensions "app"
    productFlavors {
        comone {
            applicationId "com.huayi.one"
            dimension "app"
            versionCode 1
            versionName "1.0"
            signingConfig signingConfigs.comone
        }
        comontwo {
            applicationId "com.huayi.two"
            dimension "app"
            versionCode 1
            versionName "2.0"
            signingConfig signingConfigs.comtwo
        }
    }


    build {
        doLast() {
            println "任务1编译打包完成后需要复制apk的数量:" + fileArray.size()
            forEachFile(fileArray)
        }
    }


}


def forEachFile(fileArray) {
    fileArray.forEach { file ->
        //遍历进行文件操作
        println "任务3遍历apk文件"
        rename_and_moveout_apk(file)
    }
}


def rename_and_moveout_apk(orignalFile) {
    def intoFile = rootDir.parentFile.getAbsolutePath() + File.separator + "apk"
    copy {
        from orignalFile
        into intoFile
        println "任务4复制apk到指定位置:" + intoFile
        rename("${android.defaultConfig.versionName}_${android.defaultConfig.versionCode}_", "")
        println "任务5修改apk的命名"
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

最后

上一篇 下一篇

猜你喜欢

热点阅读