Optimize build scripts

- rewrite the"exportDex" task group
- move  the logic of deleting temporary files into a gradle script
- fix "APPCENTER_KEY" property defining while debug building
This commit is contained in:
Vologhat
2023-06-27 16:42:07 +03:00
parent 3cc81dfddc
commit ea0a0f1d93
3 changed files with 41 additions and 72 deletions
+39 -63
View File
@@ -1,8 +1,6 @@
import org.apache.tools.ant.taskdefs.condition.Os
import java.util.zip.ZipEntry
import java.util.zip.ZipFile
import java.util.zip.ZipInputStream
plugins {
id 'com.android.application'
@@ -21,6 +19,10 @@ cargo {
def smaliFolder = projectDir.toPath().resolve("../smali").normalize()
def scriptsFolder = projectDir.toPath().resolve("../scripts").normalize()
//you can add own folders with decompiled smali code
def dexes=smaliFolder.toFile()
.listFiles( { f -> f.isDirectory() && f.name.startsWith("smali") } as FileFilter)
.size()
versionFile {
file = projectDir.toPath().resolve("src/main/assets/version.properties").toFile()
@@ -63,6 +65,10 @@ android {
minifyEnabled true
proguardFile 'proguard-rules.pro'
}
debug {
buildConfigField 'String', 'APPCENTER_KEY', '""'
minifyEnabled false
}
}
compileOptions {
@@ -82,70 +88,41 @@ dependencies {
implementation 'com.microsoft.appcenter:appcenter-crashes:5.0.1'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.3'
implementation 'net.sourceforge.streamsupport:streamsupport-minifuture:1.7.4'
implementation 'com.google.guava:guava:23.3-android'
implementation fileTree(dir: 'libs', include: ['*.aar'])
compileOnly fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.google.guava:guava:23.3-android'
}
task generateBuildTasks() {
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def buildType = output.name.toString().capitalize()
def lowerBuildType = buildType.toLowerCase()
task "exportDex$buildType"() {
dependsOn('assemble' + buildType)
doLast {
try {
var z = ""
if (lowerBuildType != "debug") {
z = "-unsigned"
}
File moduleDir = projectDir
ZipInputStream inputStream = new ZipInputStream(new FileInputStream(moduleDir.getAbsolutePath() + "/build/outputs/apk/$lowerBuildType/app-$lowerBuildType${z}.apk"))
ZipFile file = new ZipFile(moduleDir.getAbsolutePath() + "/build/outputs/apk/$lowerBuildType/app-$lowerBuildType${z}.apk");
ZipEntry entry
while ((entry = inputStream.nextEntry) != null) {
if (entry.getName().equals("classes.dex")) {
print('classes.dex found!')
FileOutputStream outputStream = new FileOutputStream(new File(moduleDir.getAbsoluteFile(), "classes6.dex"))
byte[] buffer = new byte[1024]
int len = 0
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len)
}
outputStream.close()
}
if (entry.getName().equals("classes2.dex")) {
print('\nclasses2.dex found!')
FileOutputStream outputStream = new FileOutputStream(new File(moduleDir.getAbsoluteFile(), "classes7.dex"))
byte[] buffer = new byte[1024]
int len = 0
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len)
}
outputStream.close()
}
}
for (ZipEntry e : Collections.list(file.entries())) {
if (e.getName().endsWith("assets/version.properties")) {
var is = file.getInputStream(e)
FileOutputStream outputStream = new FileOutputStream(new File(moduleDir.getAbsoluteFile(), "version.properties"))
byte[] buffer = new byte[1024]
int len = 0
while ((len = is.read(buffer)) > 0) {
outputStream.write(buffer, 0, len)
}
outputStream.close()
print('\nversion.properties found!')
}
def suffix=buildType.toLowerCase()
def zip=new ZipFile(new File(projectDir,"/build/outputs/apk/$suffix/app-$suffix${suffix!="debug"?"-unsigned.apk":".apk"}"))
def entries=zip.entries()
def dexCounter=dexes
while(entries.hasMoreElements())
{
def entry=entries.nextElement()
String filename
if(entry.name.matches("^classes(?:(?=\\d)2|)\\.dex\$"))filename="classes${++dexCounter}.dex"
else if(entry.name=="assets/version.properties")filename="version.properties"
else continue
println("Exporting "+entry.name)
def tmpFile=new File(projectDir,filename)
def is=zip.getInputStream(entry)
def fos=new FileOutputStream(tmpFile)
def buff=new byte[0x800]
int len
while((len=is.read(buff))>0)fos.write(buff,0,len)
is.close()
fos.close()
}
} catch (Exception e) {
e.printStackTrace()
@@ -155,17 +132,16 @@ task generateBuildTasks() {
task "prepareDexForMerge$buildType"(type: Copy) {
dependsOn('exportDex' + buildType)
// Remove comment for native lib build
dependsOn('cargoBuild')
//dependsOn('cargoBuild')
into smaliFolder.toString()
from(projectDir) {
include 'classes6.dex'
include 'classes7.dex'
into '../smali'
include "classes*.dex"
}
from(projectDir) {
include 'version.properties'
into 'assets'
}
// Remove comment for native lib build
from('../native-effects/target/aarch64-linux-android/release'){
include 'libnative_effects.so'
into 'lib/arm64-v8a'
@@ -174,15 +150,16 @@ task generateBuildTasks() {
include 'libnative_effects.so'
into 'lib/armeabi-v7a'
}
doLast {
new File(projectDir, "classes6.dex").delete()
new File(projectDir, "classes7.dex").delete()
new File(projectDir, "version.properties").delete()
}
task "cleanTemporaryFiles$buildType"(type:Delete)
{
delete fileTree(dir:projectDir,include:["*.dex","version.properties"])
delete fileTree(dir:smaliFolder,include:['*.dex',"assets/version.properties"])
}
task "buildVTL$buildType"(type: Exec) {
dependsOn('prepareDexForMerge' + buildType)
workingDir(projectDir.parentFile)
finalizedBy "cleanTemporaryFiles$buildType"
if (Os.isFamily("unix") || Os.isFamily("mac")) {
commandLine 'bash', '-c', './scripts/build.sh'
} else {
@@ -210,7 +187,6 @@ task generateBuildTasks() {
}
}
task generateRjava(type: Exec) {
workingDir(projectDir.parentFile)
if (Os.isFamily("unix") || Os.isFamily("mac"))
-3
View File
@@ -22,9 +22,6 @@ if "%ERRORLEVEL%" == "0" (
echo %ESC%[31mFailed%ESC%[0m
exit /B 1
)
del classes6.dex
del classes7.dex
del assets\version.properties
echo.
echo %ESC%[1;4mSign apk...%ESC%[0m
-4
View File
@@ -34,7 +34,3 @@ cd ../scripts
check_result
echo -e "${BOLD}VTosters Lite успешно собран! APK находится в папке scripts${NC}"
cd ../smali
rm classes6.dex
rm classes7.dex