def buildAarName = 'app-release.aar'
def targetAarName = 'CustomPlugin.aar'
//使用自己的包名路径
def packagePath = 'com/xxx/xxxxx'
def releaseAarPath = 'outputs/aar/releaseAarDir'
def releaseJarPath = 'outputs/aar/releaseJarDir'
//使用自己的工程路径
def targetAarPath = '../../../../Unity_Project/Assets/Plugins/Android/'
//解压生成的aar到文件夹,删除指定文件
task extractAar(dependsOn:assemble,type: Copy){
//如果一个任务只定义了输出, 如果输出不变的话, 它就会被视为 uptodate并跳过执行
outputs.upToDateWhen {false}
//xxx\UnityPlugins\app\build
//println('task extractAar: ' + project.buildDir.getAbsolutePath())
File aarFile = new File(project.buildDir,'outputs/aar/' + buildAarName)
File releaseAarDir = new File(project.buildDir, releaseAarPath)
//解压到指定文件夹下
from zipTree(aarFile)
into releaseAarDir
doFirst {
if (releaseAarDir.exists()){
releaseAarDir.delete()
}
println('extractAar doFirst')
}
doLast {
//删除.aar中的 libs/classes.jar 文件
File classJar = new File(releaseAarDir, 'libs/classes.jar')
if (classJar.exists()){
classJar.delete()
}
println('extractAar doLast')
}
println('extractAar')
}
//解压生成的jar到文件夹,删除指定文件
task extractJar(dependsOn: extractAar, type:Copy){
outputs.upToDateWhen {false}
File releaseAarDir = new File(project.buildDir,releaseAarPath)
File releaseJarDir = new File(project.buildDir,releaseJarPath)
File customJar = new File(releaseAarDir, 'classes.jar')
//解压classes.jar,删除其中的com/unity3d文件夹,BuildConfig.class
from zipTree(customJar)
into releaseJarDir
doFirst {
if (releaseJarDir.exists()){
releaseJarDir.deleteDir()
}
println('extractJar doFirst')
}
doLast {
//删除classes.jar
customJar.delete()
File unity3dDir = new File(releaseJarDir, 'com/unity3d')
if (releaseJarDir.exists())
{
unity3dDir.deleteDir()
println("unity3dDir.deleteDir()")
}
File configClassFile = new File(releaseJarDir, packagePath + '/BuildConfig.class')
configClassFile.delete()
println('extractJar doLast')
}
}
//重新打包jar文件放到aar解压目录下
task outputClassJar(dependsOn: extractJar, type:Zip){
outputs.upToDateWhen {false}
//重新压缩classes.jar,拷贝到aar文件夹中
File releaseJarDir = new File(project.buildDir, releaseJarPath)
File releaseAarDir = new File(project.buildDir, releaseAarPath)
from releaseJarDir
archiveName('classes.jar')
destinationDir(releaseAarDir)
println('outputClassJar')
}
//重新打包aar
task outputAar(dependsOn: outputClassJar, type:Zip){
outputs.upToDateWhen {false}
//重新压缩aar,拷贝到工程文件夹中
//重新压缩classes.jar,拷贝到aar文件夹中
File releaseAarDir = new File(project.buildDir,releaseAarPath)
File targetDir = new File(project.buildDir, 'outputs/aar')
from releaseAarDir
archiveName(targetAarName)
destinationDir(targetDir)
println('outputAar')
}
//拷贝aar文件到工程目录中
task CopyAarToTarget(dependsOn:outputAar,type:Copy){
File fromAar = new File(project.buildDir, 'outputs/aar/' + targetAarName)
File targetAar = new File(project.buildDir, targetAarPath)
from(fromAar)
into(targetAar)
//rename('app-debug.aar',targetAarName)
}
将 CopyAarToTarget的调用放在配置文件中调用,也可以在右上角gradle的task列表中手动执行
android {
compileSdk 30
defaultConfig {
minSdk 21
targetSdk 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
afterEvaluate {
assembleDebug.finalizedBy(CopyAarToTarget)
}
}

该博客介绍了一个Android Studio的任务脚本,用于自动化处理AAR文件。它包括解压、删除特定文件、重新打包并拷贝到目标工程目录的过程,主要涉及Android插件开发和构建流程的定制。
2080

被折叠的 条评论
为什么被折叠?



