diff --git a/mobile/build.gradle.kts b/mobile/build.gradle.kts index c199d797..8a909de8 100644 --- a/mobile/build.gradle.kts +++ b/mobile/build.gradle.kts @@ -10,7 +10,6 @@ plugins { android { val javaVersion = JavaVersion.VERSION_11 - val targetSdk = 29 buildToolsVersion = "31.0.0" compileOptions { isCoreLibraryDesugaringEnabled = true @@ -22,10 +21,10 @@ android { defaultConfig { applicationId = "be.mygod.vpnhotspot" minSdk = 21 - this.targetSdk = targetSdk + targetSdk = 29 resourceConfigurations.addAll(arrayOf("it", "ru", "zh-rCN", "zh-rTW")) - versionCode = 279 - versionName = "2.12.8" + versionCode = 280 + versionName = "2.13.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions.annotationProcessorOptions.arguments.apply { put("room.expandProjection", "true") @@ -33,7 +32,7 @@ android { put("room.schemaLocation", "$projectDir/schemas") } buildConfigField("boolean", "DONATIONS", "true") - buildConfigField("int", "TARGET_SDK", targetSdk.toString()) + buildConfigField("int", "TARGET_SDK", "29") } buildFeatures { dataBinding = true @@ -57,7 +56,9 @@ android { } create("google") { dimension = "freedom" + targetSdk = 31 buildConfigField("boolean", "DONATIONS", "false") + buildConfigField("int", "TARGET_SDK", "31") } } sourceSets.getByName("androidTest").assets.srcDir("$projectDir/schemas") @@ -91,6 +92,7 @@ dependencies { implementation("com.takisoft.preferencex:preferencex-simplemenu:1.1.0") implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.4") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2") + add("googleImplementation", "com.github.tiann:FreeReflection:3.1.0") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.room:room-testing:$roomVersion") androidTestImplementation("androidx.test:runner:1.4.0") diff --git a/mobile/src/freedom/java/be/mygod/vpnhotspot/util/UnblockHelper.kt b/mobile/src/freedom/java/be/mygod/vpnhotspot/util/UnblockHelper.kt new file mode 100644 index 00000000..873d210a --- /dev/null +++ b/mobile/src/freedom/java/be/mygod/vpnhotspot/util/UnblockHelper.kt @@ -0,0 +1,13 @@ +package be.mygod.vpnhotspot.util + +import android.content.Context +import java.lang.reflect.Method + +fun UnblockHelper(context: Context) { + val getDeclaredMethod = Class::class.java.getDeclaredMethod("getDeclaredMethod", + String::class.java, arrayOf>()::class.java) + val clazz = Class.forName("dalvik.system.VMRuntime") + val setHiddenApiExemptions = getDeclaredMethod(clazz, "setHiddenApiExemptions", + arrayOf(Array::class.java)) as Method + setHiddenApiExemptions(clazz.getDeclaredMethod("getRuntime")(null), arrayOf("")) +} diff --git a/mobile/src/google/AndroidManifest.xml b/mobile/src/google/AndroidManifest.xml new file mode 100644 index 00000000..0c4ac9c4 --- /dev/null +++ b/mobile/src/google/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/mobile/src/google/java/be/mygod/vpnhotspot/util/UnblockHelper.kt b/mobile/src/google/java/be/mygod/vpnhotspot/util/UnblockHelper.kt new file mode 100644 index 00000000..88e62c76 --- /dev/null +++ b/mobile/src/google/java/be/mygod/vpnhotspot/util/UnblockHelper.kt @@ -0,0 +1,8 @@ +package be.mygod.vpnhotspot.util + +import android.content.Context +import me.weishu.reflection.Reflection + +fun UnblockHelper(context: Context) { + check(Reflection.unseal(context) == 0) +} diff --git a/mobile/src/main/AndroidManifest.xml b/mobile/src/main/AndroidManifest.xml index c09932ed..3d7e527d 100644 --- a/mobile/src/main/AndroidManifest.xml +++ b/mobile/src/main/AndroidManifest.xml @@ -52,10 +52,6 @@ - - >()::class.java) - val clazz = Class.forName("dalvik.system.VMRuntime") - val setHiddenApiExemptions = getDeclaredMethod(clazz, "setHiddenApiExemptions", - arrayOf(Array::class.java)) as Method - setHiddenApiExemptions(clazz.getDeclaredMethod("getRuntime")(null), arrayOf("")) - } + private val init by lazy { UnblockHelper(app) } @RequiresApi(31) fun setUserConfiguration(clazz: Class<*>) = init.let {