Pure 64bit support

This commit is contained in:
vvb2060
2021-05-12 13:40:53 +08:00
committed by John Wu
parent 12aa5838d9
commit 66cc9bc545
13 changed files with 116 additions and 100 deletions

View File

@@ -9,7 +9,6 @@
android:name=".core.App"
android:extractNativeLibs="true"
android:icon="@drawable/ic_launcher"
android:multiArch="true"
tools:ignore="UnusedAttribute,GoogleAppIndexingWarning">
<!-- Splash -->

View File

@@ -17,7 +17,6 @@ import com.topjohnwu.magisk.di.ServiceLocator
import com.topjohnwu.magisk.ktx.unwrap
import com.topjohnwu.superuser.Shell
import timber.log.Timber
import java.io.File
import kotlin.system.exitProcess
open class App() : Application() {
@@ -56,12 +55,6 @@ open class App() : Application() {
val wrapped = impl.wrap()
super.attachBaseContext(wrapped)
val info = base.applicationInfo
val libDir = runCatching {
info.javaClass.getDeclaredField("secondaryNativeLibraryDir").get(info) as String?
}.getOrNull() ?: info.nativeLibraryDir
Const.NATIVE_LIB_DIR = File(libDir)
ServiceLocator.context = wrapped
AssetHack.init(impl)
app.registerActivityLifecycleCallbacks(ForegroundTracker)

View File

@@ -3,7 +3,6 @@ package com.topjohnwu.magisk.core
import android.os.Build
import android.os.Process
import com.topjohnwu.magisk.BuildConfig
import java.io.File
@Suppress("DEPRECATION")
object Const {
@@ -13,7 +12,6 @@ object Const {
// Paths
lateinit var MAGISKTMP: String
lateinit var NATIVE_LIB_DIR: File
val MAGISK_PATH get() = "$MAGISKTMP/modules"
const val TMPDIR = "/dev/tmp"
const val MAGISK_LOG = "/cache/magisk.log"

View File

@@ -11,14 +11,13 @@ import com.topjohnwu.magisk.ktx.getProperty
import com.topjohnwu.superuser.Shell
import com.topjohnwu.superuser.ShellUtils.fastCmd
import com.topjohnwu.superuser.internal.UiThreadHandler
import java.io.File
import java.io.IOException
val isRunningAsStub get() = Info.stub != null
object Info {
var stub: DynAPK.Data? = null
var stubArch = "lib/${Const.CPU_ABI}"
val EMPTY_REMOTE = UpdateInfo()
var remote = EMPTY_REMOTE
@@ -49,20 +48,6 @@ object Info {
}
}
val isNewReboot by lazy {
try {
val id = File("/proc/sys/kernel/random/boot_id").readText()
if (id != Config.bootId) {
Config.bootId = id
true
} else {
false
}
} catch (e: IOException) {
false
}
}
private fun loadState() = Env(
fastCmd("magisk -v").split(":".toRegex())[0],
runCatching { fastCmd("magisk -V").toInt() }.getOrDefault(-1),

View File

@@ -94,7 +94,7 @@ abstract class MagiskInstallImpl protected constructor(
if (isRunningAsStub) {
val zf = ZipFile(DynAPK.current(context))
zf.entries().asSequence().filter {
!it.isDirectory && it.name.startsWith("lib/${Const.CPU_ABI_32}/")
!it.isDirectory && it.name.startsWith(Info.stubArch)
}.forEach {
val n = it.name.substring(it.name.lastIndexOf('/') + 1)
val name = n.substring(3, n.length - 3)
@@ -102,7 +102,7 @@ abstract class MagiskInstallImpl protected constructor(
zf.getInputStream(it).writeTo(dest)
}
} else {
val libs = Const.NATIVE_LIB_DIR.listFiles { _, name ->
val libs = File(context.applicationInfo.nativeLibraryDir).listFiles { _, name ->
name.startsWith("lib") && name.endsWith(".so")
} ?: emptyArray()
for (lib in libs) {
@@ -250,7 +250,7 @@ abstract class MagiskInstallImpl protected constructor(
src.reset()
val alpha = "abcdefghijklmnopqrstuvwxyz"
val alphaNum = "$alpha${alpha.toUpperCase(Locale.ROOT)}0123456789"
val alphaNum = "$alpha${alpha.uppercase(Locale.ROOT)}0123456789"
val random = SecureRandom()
val filename = StringBuilder("magisk_patched-${BuildConfig.VERSION_CODE}_").run {
for (i in 1..5) {

View File

@@ -1,7 +1,6 @@
package com.topjohnwu.magisk.core.utils
import android.content.Context
import android.os.Build
import com.topjohnwu.magisk.DynAPK
import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.core.*
@@ -34,13 +33,17 @@ class BusyBoxInit : BaseShellInit() {
if (!shell.isRoot)
return true
val jar = JarFile(DynAPK.current(context))
val bb = jar.getJarEntry("lib/${Const.CPU_ABI_32}/libbusybox.so")
var bb = jar.getJarEntry("${Info.stubArch}/libbusybox.so")
if (bb == null) {
Info.stubArch = "lib/${Const.CPU_ABI_32}"
bb = jar.getJarEntry("${Info.stubArch}/libbusybox.so")
}
localBB = context.deviceProtectedContext.cachedFile("busybox")
localBB.delete()
jar.getInputStream(bb).writeTo(localBB)
localBB.setExecutable(true)
} else {
localBB = File(Const.NATIVE_LIB_DIR, "libbusybox.so")
localBB = File(context.applicationInfo.nativeLibraryDir, "libbusybox.so")
}
if (shell.isRoot) {