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' id 'net.nemerosa.versioning' version '2.15.1' } def smaliFolder = projectDir.toPath().resolve("../smali").normalize() def scriptsFolder = projectDir.toPath().resolve("../scripts").normalize() versionFile { file = projectDir.toPath().resolve("src/main/assets/version.properties").toFile() } task cleanVersionFile { projectDir.toPath().resolve("src/main/assets/version.properties").toFile().delete() } task exportDex { doLast { try { File moduleDir = projectDir ZipInputStream inputStream = new ZipInputStream(new FileInputStream(moduleDir.getAbsolutePath() + "/build/outputs/apk/release/app-release-unsigned.apk")) ZipFile file = new ZipFile(moduleDir.getAbsolutePath() + "/build/outputs/apk/release/app-release-unsigned.apk"); ZipEntry entry while ((entry = inputStream.nextEntry) != null) { if (entry.getName().equals("classes.dex")) { print('classes.dex found!') FileOutputStream output = new FileOutputStream(new File(moduleDir.getAbsoluteFile(), "classes6.dex")) byte[] buffer = new byte[1024] int len = 0 while ((len = inputStream.read(buffer)) > 0) { output.write(buffer, 0, len) } output.close() } if (entry.getName().equals("classes2.dex")) { print('\nclasses2.dex found!') FileOutputStream output = new FileOutputStream(new File(moduleDir.getAbsoluteFile(), "classes7.dex")) byte[] buffer = new byte[1024] int len = 0 while ((len = inputStream.read(buffer)) > 0) { output.write(buffer, 0, len) } output.close() } } for (ZipEntry e : Collections.list(file.entries())) { if (e.getName().endsWith("assets/version.properties")) { var is = file.getInputStream(e) FileOutputStream output = new FileOutputStream(new File(moduleDir.getAbsoluteFile(), "version.properties")) byte[] buffer = new byte[1024] int len = 0 while ((len = is.read(buffer)) > 0) { output.write(buffer, 0, len) } output.close() print('\nversion.properties found!') } } } catch (Exception e) { e.printStackTrace() } } } android { compileSdkVersion 32 buildToolsVersion '32.0.0' sourceSets { main { java.srcDirs += 'build/generated/aidl_source_output_dir/release/out' } } defaultConfig { applicationId "ru.vtosters.lite.utils.lite" minSdk 22 targetSdkVersion 32 versionCode 1 versionName "1.0" multiDexEnabled true } compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } namespace 'ru.vtosters.lite' } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' implementation 'net.sourceforge.streamsupport:streamsupport-minifuture:1.7.4' implementation fileTree(dir: 'libs', include: ['*.aar']) compileOnly fileTree(dir: 'libs', include: ['*.jar']) } task prepareDexForMerge(type: Copy) { dependsOn('exportDex') into smaliFolder.toString() from(projectDir) { include 'classes6.dex' include 'classes7.dex' } from(projectDir) { include 'version.properties' into("assets") } doLast { new File(projectDir, "classes6.dex").delete() new File(projectDir, "classes7.dex").delete() new File(projectDir, "version.properties").delete() } } task buildVTL(type: Exec) { dependsOn('prepareDexForMerge') workingDir(projectDir.parentFile) if (Os.isFamily("unix") || Os.isFamily("mac")) { commandLine 'bash', '-c', './scripts/build.sh' } else { commandLine 'cmd', '/C', '.\\scripts\\build.bat' } } task buildAndInstallVTL(type: Exec) { dependsOn('buildVTL') workingDir(scriptsFolder.toString()) ignoreExitValue true if (Os.isFamily("unix") || Os.isFamily("mac")) { commandLine 'bash', '-c', 'adb install VTLite.apk' } else { commandLine 'adb', 'install', 'VTLite.apk' } } task buildAndLaunchVTL(type: Exec) { dependsOn('buildAndInstallVTL') if (Os.isFamily("unix") || Os.isFamily("mac")) commandLine 'bash', '-c', 'adb shell monkey -p com.vtosters.lite -c android.intent.category.LAUNCHER 1' else commandLine 'adb', 'shell', 'monkey', '-p', 'com.vtosters.lite', '-c', 'android.intent.category.LAUNCHER', '1' } task generateRjava(type: Exec) { workingDir(projectDir.parentFile) if (Os.isFamily("unix") || Os.isFamily("mac")) commandLine "bash", "-c", "./scripts/rclass_regenerator.sh" else commandLine "cmd", "/C", ".\\scripts\\rclass_regenerator.sh" } exportDex.dependsOn('assembleRelease') clean.dependsOn('cleanVersionFile') versionFile.dependsOn('cleanVersionFile') preBuild.dependsOn('versionFile')