From ea0a0f1d93ac634ff71e232743346350cd02bf86 Mon Sep 17 00:00:00 2001 From: Vologhat <47892605+Vologhat@users.noreply.github.com> Date: Tue, 27 Jun 2023 16:23:52 +0300 Subject: [PATCH] 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 --- app/build.gradle | 104 ++++++++++++++++++---------------------------- scripts/build.bat | 3 -- scripts/build.sh | 6 +-- 3 files changed, 41 insertions(+), 72 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 138dd1d42..9b87d6034 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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")) diff --git a/scripts/build.bat b/scripts/build.bat index 918639a0a..93ab95249 100644 --- a/scripts/build.bat +++ b/scripts/build.bat @@ -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 diff --git a/scripts/build.sh b/scripts/build.sh index d63803ac4..82d4669ce 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -33,8 +33,4 @@ cd ../scripts ./apksigner sign --ks debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android ../scripts/VTLite.apk check_result -echo -e "${BOLD}VTosters Lite успешно собран! APK находится в папке scripts${NC}" - -cd ../smali -rm classes6.dex -rm classes7.dex +echo -e "${BOLD}VTosters Lite успешно собран! APK находится в папке scripts${NC}" \ No newline at end of file