mirror of
https://github.com/kavishdevar/librepods.git
synced 2026-04-29 09:33:04 +00:00
android: load native hook from split apks when base fails
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
import java.util.Properties
|
import java.util.Properties
|
||||||
|
|
||||||
val appVersionName = "0.2.4"
|
val appVersionName = "0.2.5"
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.android.application)
|
alias(libs.plugins.android.application)
|
||||||
@@ -30,7 +30,7 @@ android {
|
|||||||
applicationId = "me.kavishdevar.librepods"
|
applicationId = "me.kavishdevar.librepods"
|
||||||
minSdk = 33
|
minSdk = 33
|
||||||
targetSdk = 37
|
targetSdk = 37
|
||||||
versionCode = 40
|
versionCode = 41
|
||||||
versionName = appVersionName
|
versionName = appVersionName
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ class KotlinModule: XposedModule() {
|
|||||||
log(Log.INFO, TAG, "framework: $frameworkName($frameworkVersionCode) API $apiVersion")
|
log(Log.INFO, TAG, "framework: $frameworkName($frameworkVersionCode) API $apiVersion")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("UnsafeDynamicallyLoadedCode")
|
||||||
override fun onPackageLoaded(param: PackageLoadedParam) {
|
override fun onPackageLoaded(param: PackageLoadedParam) {
|
||||||
log(Log.INFO, TAG, "onPackageLoaded :: ${param.packageName}")
|
log(Log.INFO, TAG, "onPackageLoaded :: ${param.packageName}")
|
||||||
|
|
||||||
@@ -27,8 +28,36 @@ class KotlinModule: XposedModule() {
|
|||||||
log(Log.INFO, TAG, "Bluetooth app detected, hooking l2c_fcr_chk_chan_modes")
|
log(Log.INFO, TAG, "Bluetooth app detected, hooking l2c_fcr_chk_chan_modes")
|
||||||
try {
|
try {
|
||||||
if (param.isFirstPackage) {
|
if (param.isFirstPackage) {
|
||||||
log(Log.INFO, TAG, "Loading native library for Bluetooth hook")
|
val abi = android.os.Build.SUPPORTED_ABIS.first()
|
||||||
System.loadLibrary("l2c_fcr_hook")
|
val soName = "libl2c_fcr_hook.so"
|
||||||
|
|
||||||
|
val candidates = buildList {
|
||||||
|
add("${moduleApplicationInfo.sourceDir}!/lib/$abi/$soName")
|
||||||
|
|
||||||
|
moduleApplicationInfo.splitSourceDirs?.forEach { split ->
|
||||||
|
add("$split!/lib/$abi/$soName")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var loaded = false
|
||||||
|
|
||||||
|
for (path in candidates) {
|
||||||
|
try {
|
||||||
|
log(Log.INFO, TAG, "Trying to load native lib from $path")
|
||||||
|
System.load(path)
|
||||||
|
log(Log.INFO, TAG, "Loaded native lib from $path")
|
||||||
|
loaded = true
|
||||||
|
break
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
log(Log.WARN, TAG, "Failed to load from $path: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!loaded) {
|
||||||
|
log(Log.ERROR, TAG, "Could not load $soName from base or splits")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
val remotePrefValue = getRemotePreferences("me.kavishdevar.librepods").getBoolean("vendor_id_hook", false)
|
val remotePrefValue = getRemotePreferences("me.kavishdevar.librepods").getBoolean("vendor_id_hook", false)
|
||||||
log(Log.INFO, TAG, "sdp hook enabled (remote pref): $remotePrefValue")
|
log(Log.INFO, TAG, "sdp hook enabled (remote pref): $remotePrefValue")
|
||||||
NativeBridge.setSdpHook(remotePrefValue)
|
NativeBridge.setSdpHook(remotePrefValue)
|
||||||
|
|||||||
Reference in New Issue
Block a user