request Shizuku permission

This commit is contained in:
Gregory
2023-12-22 16:08:41 +03:00
parent 36e6c267b9
commit b6b8db48df
2 changed files with 62 additions and 4 deletions

View File

@ -66,6 +66,13 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<provider
android:name="rikka.shizuku.ShizukuProvider"
android:authorities="${applicationId}.shizuku"
android:multiprocess="false"
android:enabled="true"
android:exported="true"
android:permission="android.permission.INTERACT_ACROSS_USERS_FULL" />
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

View File

@ -5,10 +5,51 @@ import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.Result
import androidx.annotation.NonNull
import android.content.pm.PackageManager
import android.os.Bundle
import rikka.shizuku.Shizuku
import rikka.shizuku.Shizuku.OnBinderDeadListener
import rikka.shizuku.Shizuku.OnBinderReceivedListener
import rikka.shizuku.Shizuku.OnRequestPermissionResultListener
import com.topjohnwu.superuser.Shell
class MainActivity: FlutterActivity() {
private val installersChannel = "installers"
private val SHIZUKU_PERMISSION_REQUEST_CODE = 839 // random num
private var shizukuBinderAlive = false
private var shizukuPermissionGranted = false
private val shizukuBinderReceivedListener = OnBinderReceivedListener {
if(!Shizuku.isPreV11()) { // pre 11 unsupported
shizukuBinderAlive = true
}
}
private val shizukuBinderDeadListener = OnBinderDeadListener { shizukuBinderAlive = false }
private val shizukuRequestPermissionResultListener = OnRequestPermissionResultListener {
requestCode: Int, grantResult: Int ->
if(requestCode == SHIZUKU_PERMISSION_REQUEST_CODE) {
shizukuPermissionGranted = grantResult == PackageManager.PERMISSION_GRANTED
}
}
private fun shizukuCheckPermission() {
if(Shizuku.isPreV11()) {
shizukuPermissionGranted = false
} else if (Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) {
shizukuPermissionGranted = true
} else if (Shizuku.shouldShowRequestPermissionRationale()) { // Deny and don't ask again
shizukuPermissionGranted = false
} else {
Shizuku.requestPermission(SHIZUKU_PERMISSION_REQUEST_CODE)
}
}
private fun installWithShizuku(apkFilePath: String, result: Result) {
shizukuCheckPermission()
result.success(0)
}
private fun installWithRoot(apkFilePath: String, result: Result) {
Shell.sh("pm install -r -t " + apkFilePath).submit { out ->
@ -20,10 +61,6 @@ class MainActivity: FlutterActivity() {
}
}
private fun installWithShizuku(apkFilePath: String, result: Result) {
val a = 1
}
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, installersChannel).setMethodCallHandler {
@ -36,4 +73,18 @@ class MainActivity: FlutterActivity() {
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Shizuku.addBinderReceivedListener(shizukuBinderReceivedListener)
Shizuku.addBinderDeadListener(shizukuBinderDeadListener)
Shizuku.addRequestPermissionResultListener(shizukuRequestPermissionResultListener)
}
override fun onDestroy() {
super.onDestroy()
Shizuku.removeBinderReceivedListener(shizukuBinderReceivedListener)
Shizuku.removeBinderDeadListener(shizukuBinderDeadListener)
Shizuku.removeRequestPermissionResultListener(shizukuRequestPermissionResultListener)
}
}