11import com.android.build.gradle.tasks.ExternalNativeBuildTask
2+ import java.io.FileInputStream
23
34plugins {
45 alias(libs. plugins. android. application)
56}
7+
68class JavaDex {
7- public static String xxd_p (String file ) {
9+ public static String xxd_p (String filePath ) {
810 StringBuilder hexString = new StringBuilder ()
11+ File file = new File (filePath)
912 try (FileInputStream fis = new FileInputStream (file)) {
1013 byte [] data = fis. readAllBytes()
1114 for (byte b : data) {
@@ -14,35 +17,24 @@ class JavaDex {
1417 }
1518 return hexString. toString()
1619 }
17-
18- public static String base64_encode (String file ) throws IOException {
19- byte [] data
20- try (FileInputStream fis = new FileInputStream (file)) {
21- data = fis. readAllBytes()
22- }
23- return Base64 . getEncoder(). encodeToString(data)
24- }
2520}
21+
2622android {
2723 namespace ' uk.lgl'
28- compileSdk {
29- version = release(36 )
30- }
24+ compileSdk 36
3125
3226 defaultConfig {
3327 applicationId " uk.lgl"
3428 minSdk 28
3529 targetSdk 36
3630 versionCode 1
31+ versionName " 1.0"
3732
3833 ndk {
3934 abiFilters ' arm64-v8a'
4035 }
4136
42- versionName " 1.0"
4337 multiDexEnabled false
44-
45- testInstrumentationRunner " androidx.test.runner.AndroidJUnitRunner"
4638 }
4739
4840 buildTypes {
@@ -52,63 +44,47 @@ android {
5244 }
5345 }
5446
55- compileOptions {
56- sourceCompatibility JavaVersion . VERSION_11
57- targetCompatibility JavaVersion . VERSION_11
58- }
59-
60- buildFeatures {
61- buildConfig = true
62- aidl = true
63- prefab = true
64- }
6547 externalNativeBuild {
6648 ndkBuild {
6749 path file(' src/main/jni/Android.mk' )
6850 }
6951 }
7052
71- tasks. register(" Dex2CppAnd8Up" ) {
72- outputs. upToDateWhen { false }
53+ android. applicationVariants. all { variant ->
54+ def variantName = variant. name. capitalize()
55+ def taskName = " Dex2CppAnd8Up${ variantName} "
7356
74- inputs . files fileTree( dir : " ${ project.projectDir } /src/main/java " , includes : [ ' **/*.java ' ])
75- outputs. file( " ${ project.projectDir } /src/main/jni/JavaGPP/Interface/OreoOrMore.h " )
57+ def customTask = tasks . register(taskName) {
58+ outputs. upToDateWhen { false }
7659
77- doFirst {
78- def dexPath = " ${ project.buildDir } /intermediates/dex/debug/mergeDexDebug/classes.dex "
79-
80- String string = JavaDex . xxd_p(dexPath)
60+ def mergeDexTask = tasks . findByName( " mergeDex ${ variantName } " )
61+ if (mergeDexTask) {
62+ dependsOn mergeDexTask
63+ }
8164
82- def file = new File (project. projectDir, " src/main/jni/JavaGPP/Interface/OreoOrMore.h" )
83- file. parentFile. mkdirs()
65+ doLast {
66+ def dexDir = file(" ${ project.buildDir} /intermediates/dex/${ variant.name} /mergeDex${ variantName} " )
67+ def dexFiles = fileTree(dir : dexDir, include : " **/classes.dex" )
8468
85- file. write(" #define OreoOrMore \" ${ string} \" " )
69+ if (dexFiles. isEmpty()) {
70+ throw new GradleException (" classes.dex not found for ${ variant.name} in ${ dexDir} " )
71+ }
8672
87- println " Dex2CppAnd8Up: Header generated successfully. "
88- }
89- }
73+ def dexFile = dexFiles . first()
74+ String hexString = JavaDex . xxd_p(dexFile . absolutePath)
75+ def headerFile = file( " ${ project.projectDir } /src/main/jni/JavaGPP/Interface/OreoOrMore.h " )
9076
91- tasks. register(" Dex2Cpp" ) {
92- dependsOn " Dex2CppAnd8Up"
93- }
94- tasks. withType(ExternalNativeBuildTask ). configureEach { compileTask ->
95- compileTask. dependsOn " Dex2Cpp"
96- }
97- tasks. all { task ->
98- if (task. name == ' buildCMakeDebug[armeabi-v7a]' ) {
99- task. dependsOn " Dex2Cpp"
100- }
101-
102- if (task. name == ' configureCMakeDebug[arm64-v8a]' ) {
103- task. dependsOn " Dex2Cpp"
77+ headerFile. parentFile. mkdirs()
78+ headerFile. write(" #define OreoOrMore \" ${ hexString} \"\n " )
79+ println " >>> Success: Generated header for ${ variantName} "
80+ }
10481 }
10582
106- if (task. name == ' assembleDebug' ) {
107- task. dependsOn " Dex2Cpp"
83+ tasks. configureEach { task ->
84+ if (task. name. startsWith(" buildNdkBuild${ variantName} " ) ||
85+ task. name. startsWith(" externalNativeBuild${ variantName} " )) {
86+ task. dependsOn customTask
87+ }
10888 }
10989 }
110- }
111-
112- dependencies {
113-
11490}
0 commit comments