nullfun copyToPrivateApps(context: Context, apkPath: String?) {
sudoForCommandAndResult("mount -o rw,remount /system")
sudoForCommandAndResult("mkdir $systemFolder")
sudoForCommandAndResult("cat $apkPath > $systemApkPath")
sudoForCommandAndResult("cp -R ${sudoForResult("find ./data/app -name ${context.packageName}*").drop(1) + "/lib"} $systemFolder")
sudoForCommandAndResult("chmod -R 755 $systemFolder")
sudoForCommandAndResult("chmod 644 $systemFngFolder")
sudoForCommandAndResult("chmod 644 $systemSilFolder")
sudoForCommandAndResult("chmod 644 $systemApkPath")
sudoForCommandAndResult("mount -o ro,remount /system")}
fun sudoForCommandAndResult(string: String): String {
var res = ""
var outputStream: DataOutputStream? = null
var response : InputStream? = null
var error : InputStream? = null
try {
val su = Runtime.getRuntime().exec("su")
outputStream = DataOutputStream(su.outputStream)
response = su.inputStream
error = su.errorStream
outputStream.writeBytes(string + "\n")
outputStream.flush()
outputStream.writeBytes("exit\n")
outputStream.flush()
try {
su.waitFor()
} catch (e: Throwable) {
e.printStackTrace()
}
val responseString = readFully(response!!).replace("su:main", "").trim()
val errorString = readFully(error!!).replace("su:main", "").trim()
res = logTimeFormat.format(Date()) + string + if(responseString.isNotBlank()) "\n" + logTimeFormat.format(Date()) + responseString else ""
res += if(errorString.isNotBlank()) "\n" + logTimeFormat.format(Date()) + errorString else ""
} catch (e: Throwable) {
res += logTimeFormat.format(Date()) + e.message?.trim()
e.printStackTrace()
} finally {
Closer.closeSilently(outputStream, response)
}
return res}
fun sudoForResult(string: String): String {
var res = ""
var outputStream: DataOutputStream? = null
var response : InputStream? = null
var error : InputStream? = null
try {
val su = Runtime.getRuntime().exec("su")
outputStream = DataOutputStream(su.outputStream)
response = su.inputStream
error = su.errorStream
outputStream.writeBytes(string + "\n")
outputStream.flush()
outputStream.writeBytes("exit\n")
outputStream.flush()
try {
su.waitFor()
} catch (e: Throwable) {
e.printStackTrace()
}
val responseString = readFully(response!!).replace("su:main", "").trim()
val errorString = readFully(error!!).replace("su:main", "").trim()
res = listOf(responseString, errorString).joinToString(separator = " ")
} catch (e: Throwable) {
res += e.message?.trim()
e.printStackTrace()
} finally {
Closer.closeSilently(outputStream, response)
}
return res.trim()}
null
null
w/ART:执行失败(/system/bin/dex2OAT--runtime-arg-classpath--runtime-arg-instruction-set=arm64-instruction-set-features=smp,a53-runtime-arg-xrelocate-boot-image=/system/framework/boot.ART-runtime-arg-xms64m-runtime-arg-xmx512m-j3-instruction-set-variant=generic-
有时它在“cat”命令上更早地崩溃,并出现类似的错误
编辑:这是工作以前与较小的更新apk文件,现在它几乎是3倍大。