android编译后目录,AndroidStudio3.0下命令行打包自定义输出路径和输出命名

新年伊始

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

王维 <>

空山新雨后,天气晚来秋.

明月松间照,清泉石上流.

竹喧归浣女,莲动下渔舟.

随意春芳歇,王孙自可留.

正题

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

项目结构

5fa77b7fe8f4

image.png

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

项目下的build.gradle 文件配置

在android{ } 里面配置多个工程包

//根据项目工程配置出不同的包

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

}

}

在android{ } 里面配置签名

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'

}

}

在android{ } 里面控住输出路径

//定义一个装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);

}

}

}

在android{ } 里面写一个apk的复制重命名的任务(task)

build {

doLast() {

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

forEachFile(fileArray)

}

}

最后在android{ }之外 当然是定义一个执行复制命名的方法了

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

看看结果:

5fa77b7fe8f4

image.png

5fa77b7fe8f4

image.png

上面的结果清晰明了,先编译打包,最后执行复制命名任务,一气呵成.

贴出全部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'

}

最后

如果有具体问题可以私聊


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部