220 lines
8.4 KiB
Groovy
220 lines
8.4 KiB
Groovy
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'
|
|
id 'org.mozilla.rust-android-gradle.rust-android'
|
|
}
|
|
|
|
cargo {
|
|
profile = 'release'
|
|
module = '../native-effects'
|
|
libname = 'native-effects'
|
|
targets = ["arm", "arm64"]
|
|
prebuiltToolchains = true
|
|
pythonCommand = "python3"
|
|
}
|
|
|
|
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()
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
buildTypes {
|
|
dev {
|
|
initWith release
|
|
buildConfigField 'String', 'APPCENTER_KEY', '""'
|
|
}
|
|
beta {
|
|
initWith release
|
|
buildConfigField 'String', 'APPCENTER_KEY', '""'
|
|
}
|
|
release {
|
|
buildConfigField 'String', 'APPCENTER_KEY', '""'
|
|
}
|
|
}
|
|
|
|
compileOptions {
|
|
coreLibraryDesugaringEnabled true
|
|
sourceCompatibility JavaVersion.VERSION_14
|
|
targetCompatibility JavaVersion.VERSION_14
|
|
}
|
|
namespace 'ru.vtosters.lite'
|
|
ndkVersion '25.2.9519653'
|
|
}
|
|
|
|
dependencies {
|
|
implementation "com.microsoft.appcenter:appcenter-analytics:5.0.0"
|
|
implementation "com.microsoft.appcenter:appcenter-crashes:5.0.0"
|
|
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'])
|
|
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!')
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace()
|
|
}
|
|
}
|
|
}
|
|
task "prepareDexForMerge$buildType"(type: Copy) {
|
|
dependsOn('exportDex' + buildType)
|
|
// Remove comment for native lib build
|
|
dependsOn('cargoBuild')
|
|
into smaliFolder.toString()
|
|
from(projectDir) {
|
|
include 'classes6.dex'
|
|
include 'classes7.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'
|
|
}
|
|
from('../native-effects/target/armv7-linux-androideabi/release'){
|
|
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 "buildVTL$buildType"(type: Exec) {
|
|
dependsOn('prepareDexForMerge' + buildType)
|
|
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$buildType"(type: Exec) {
|
|
dependsOn('buildVTL' + buildType)
|
|
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$buildType"(type: Exec) {
|
|
dependsOn('buildAndInstallVTL' + buildType)
|
|
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"
|
|
}
|
|
|
|
clean.dependsOn('cleanVersionFile')
|
|
versionFile.dependsOn('cleanVersionFile')
|
|
preBuild.dependsOn('versionFile')
|