diff --git a/README.md b/README.md index 572f1d6..e17d030 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,14 @@ implementation 'io.github.iamr0s:AndroidAppProcess:' ```java AppProcess process = new AppProcess.Default(); -process.init(context.getPackageName()); +process.init(context); ``` - Root ```java AppProcess process = new AppProcess.Root(); -process.init(context.getPackageName()); +process.init(context); ``` ### 2. Use it. @@ -34,13 +34,13 @@ process.init(context.getPackageName()); ```java AppProcess process = new AppProcess.Root(); -process.init(context.getPackageName()); +process.init(context); -IPackageManager manager = android.os.ServiceManager.getService("package"); +IBinder manager = ServiceManager.getService("package"); IBinder binderWrapper = process.binderWrapper(manager.asBinder()); IPackageManager managerWrapper = IPackageManager.Stub.asInterface(binderWrapper); -managerWrapper.uninstall(...) // will call it in root. +managerWrapper.uninstall(...); // will call it in root. ``` - More diff --git a/app/build.gradle b/app/build.gradle index 3e3b9bf..661883e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,5 +32,6 @@ android { } dependencies { + compileOnly project(":hidden-api") implementation project(":app-process") } diff --git a/app/src/main/java/com/rosan/app_process/demo/MainActivity.java b/app/src/main/java/com/rosan/app_process/demo/MainActivity.java index 70a7782..a9ad7e4 100644 --- a/app/src/main/java/com/rosan/app_process/demo/MainActivity.java +++ b/app/src/main/java/com/rosan/app_process/demo/MainActivity.java @@ -1,13 +1,59 @@ package com.rosan.app_process.demo; import android.app.Activity; +import android.content.pm.IPackageManager; import android.os.Bundle; +import android.os.IBinder; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.widget.TextView; +import android.widget.Toast; + +import com.rosan.app_process.AppProcess; + +import java.util.Arrays; public class MainActivity extends Activity { + private void makeText(String msg) { + runOnUiThread(() -> Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + + AppProcess process = new AppProcess.Default(); + if (!process.init(this)) { + makeText("AppProcess: failed initialize."); + finishAndRemoveTask(); + return; + } + + IBinder manager = ServiceManager.getService("package"); + IBinder binderWrapper; + try { + binderWrapper = process.binderWrapper(manager); + } catch (IllegalStateException ignored) { + makeText("AppProcess: please call init() first."); + finishAndRemoveTask(); + return; + } + IPackageManager managerWrapper = IPackageManager.Stub.asInterface(binderWrapper); + + String[] libraries = new String[]{"NULL"}; + try { + if (managerWrapper != null) { + libraries = managerWrapper.getSystemSharedLibraryNames(); + } + } catch (RemoteException ignored) { + makeText("RemoteException occurred."); + } + + TextView text = findViewById(R.id.text); + text.setText(Arrays.toString(libraries)); + + process.close(); } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index dca8204..8ddf7c5 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,12 +1,13 @@ - - + diff --git a/hidden-api/build.gradle b/hidden-api/build.gradle index e3b548a..af88231 100644 --- a/hidden-api/build.gradle +++ b/hidden-api/build.gradle @@ -10,6 +10,10 @@ android { minSdk = 19 } + buildFeatures { + aidl = true + } + compileOptions { sourceCompatibility JavaVersion.VERSION_21 targetCompatibility JavaVersion.VERSION_21 diff --git a/hidden-api/src/main/aidl/android/content/pm/IPackageManager.aidl b/hidden-api/src/main/aidl/android/content/pm/IPackageManager.aidl new file mode 100644 index 0000000..8a0dab1 --- /dev/null +++ b/hidden-api/src/main/aidl/android/content/pm/IPackageManager.aidl @@ -0,0 +1,5 @@ +package android.content.pm; + +interface IPackageManager { + String[] getSystemSharedLibraryNames(); +}