canyie / canyie/pine

在Android15下 Hook SettingsHomepageActivity的onCreate ,设置app重启崩溃,这种怎么解决的

Open
#111 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
1.5k
Forks
279
PR merge metrics
No merged PRs in 30d

Description

Hooking method protected native void com.android.settings.homepage.SettingsHomepageActivity.onCreate(android.os.Bundle) with callback com.fundot.p4bu.ii.hook.classs.HookSettingsHomepageActivity33$1@78e85d9
10:27:34.250 3216-3216 P4buHookSettingsManager usap64 D =======hookSearchTitle===android 13.0 HookSettingsHomepageActivity33 Pine=====
10:27:34.416 1628-1628 P4buAppDataSystemBanManager com.fundot.p4bu D 应用使用数据切换 更新辅助服务数据 lastBeanAccessibility reSet = com.android.settings,com.android.settings.homepage.SettingsHomepageActivity
10:27:34.420 1628-1628 P4buAppDataSystemBanManager com.fundot.p4bu V currentAppItem ,1781749654396, com.android.settings , com.android.settings.homepage.SettingsHomepageActivity ,fromAccessibility = false
10:27:34.538 3216-3216 Pine usap64 D handleCall for method protected native void com.android.settings.homepage.SettingsHomepageActivity.onCreate(android.os.Bundle)
10:27:34.538 3216-3216 ndroid.settings usap64 E No implementation found for void com.android.settings.homepage.SettingsHomepageActivity.onCreate(android.os.Bundle) (tried Java_com_android_settings_homepage_SettingsHomepageActivity_onCreate and Java_com_android_settings_homepage_SettingsHomepageActivity_onCreate__Landroid_os_Bundle_2) - is the library loaded, e.g. System.loadLibrary?
10:27:34.538 3216-3216 HookSettingsHomepageActivity usap64 D onCreate
10:27:34.545 3216-3216 AndroidRuntime usap64 E FATAL EXCEPTION: main
Process: com.android.settings, PID: 3216
java.lang.UnsatisfiedLinkError: No implementation found for void com.android.settings.homepage.SettingsHomepageActivity.onCreate(android.os.Bundle) (tried Java_com_android_settings_homepage_SettingsHomepageActivity_onCreate and Java_com_android_settings_homepage_SettingsHomepageActivity_onCreate__Landroid_os_Bundle_2) - is the library loaded, e.g. System.loadLibrary?
at com.android.settings.homepage.SettingsHomepageActivity.onCreate(Native Method)
at java.lang.reflect.Method.invoke(Native Method)
at top.canyie.pine.Pine.callBackupMethod(Pine.java:501)
at top.canyie.pine.Pine$CallFrame.invokeOriginalMethod(Pine.java:1092)
at top.canyie.pine.Pine.handleCall(Pine.java:753)
at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
at top.canyie.pine.entry.Arm64Entry.voidBridge(Arm64Entry.java:23)
at android.app.Activity.performCreate(Activity.java:9084)
at android.app.Activity.performCreate(Activity.java:9062)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1542)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4100)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4305)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:112)
at android.app.servertransaction.TransactionExecutor.executeNonLifecycleItem(TransactionExecutor.java:174)
at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:109)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:81)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2706)
at android.os.Handler.dispatchMessage(Handler.java:116)
at android.os.Looper.loopOnce(Looper.java:235)
at android.os.Looper.loop(Looper.java:323)
at android.app.ActivityThread.main(ActivityThread.java:8805)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
10:27:34.545 3216-3216 P4buCrashHandler usap64 E application crashed! : java.lang.UnsatisfiedLinkError: No implementation found for void com.android.settings.homepage.SettingsHomepageActivity.onCreate(android.os.Bundle) (tried Java_com_android_settings_homepage_SettingsHomepageActivity_onCreate and Java_com_android_settings_homepage_SettingsHomepageActivity_onCreate__Landroid_os_Bundle_2) - is the library loaded, e.g. System.loadLibrary?
at com.android.settings.homepage.SettingsHomepageActivity.onCreate(Native Method)
at java.lang.reflect.Method.invoke(Native Method)
at top.canyie.pine.Pine.callBackupMethod(Pine.java:501)
at top.canyie.pine.Pine$CallFrame.invokeOriginalMethod(Pine.java:1092)
at top.canyie.pine.Pine.handleCall(Pine.java:753)
at top.canyie.pine.entry.Arm64Entry.handleBridge(Arm64Entry.java:158)
at top.canyie.pine.entry.Arm64Entry.voidBridge(Arm64Entry.java:23)
at android.app.Activity.performCreate(Activity.java:9084)
at android.app.Activity.performCreate(Activity.java:9062)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1542)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4100)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4305)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:112)
at android.app.servertransaction.TransactionExecutor.executeNonLifecycleItem(TransactionExecutor.java:174)
at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:109)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:81)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2706)
at android.os.Handler.dispatchMessage(Handler.java:116)
at android.os.Looper.loopOnce(Looper.java:235)
at android.os.Looper.loop(Looper.java:323)
at android.app.ActivityThread.main(ActivityThread.java:8805)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
10:27:38.788 620-671 WindowManager system_server V Sent Transition (#11) createdAt=06-18 10:27:33.783 via request=TransitionRequestInfo { type = OPEN, triggerTask = TaskInfo{userId=0 taskId=18 displayId=0 isRunning=true baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.settings/.Settings } baseActivity=ComponentInfo{com.android.settings/com.android.settings.homepage.SettingsHomepageActivity} topActivity=ComponentInfo{com.android.settings/com.android.settings.homepage.SettingsHomepageActivity} origActivity=ComponentInfo{com.android.settings/com.android.settings.Settings} realActivity=ComponentInfo{com.android.settings/com.android.settings.homepage.SettingsHomepageActivity} numActivities=1 lastActiveTime=146803 supportsMultiWindow=true resizeMode=1 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{RemoteToken{41b582a Task{f07efd1 #18 type=standard A=1000:com.android.settings.root}}} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=null topActivityInfo=ActivityInfo{efd861b com.android.settings.Settings} launchCookies=[] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=false isVisible=false isVisibleRequested=false isSleeping=false locusId=null displayAreaFeatureId=1 isTopActivityTransparent=false appCompatTaskInfo=AppCompatTaskInfo { topActivityInSizeCompat=false topActivityEligibleForLetterboxEducation= falseisLetterboxEducationEnabled= false isLetterboxDoubleTapEnabled= false topActivityEligibleForUserAspectRatioButton= false topActivityBoundsLetterboxed= false isFromLetterboxDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=1920 topActivityLetterboxHeight=1200 isUserFullscreenOverrideEnabled=false isSystemFullscreenOverrideEnabled=false cameraCompatTaskInfo=CameraCompatTaskInfo { cameraCompatControlState=hidden freeformCameraCompatMode=inactive}}}, pipTask = null, remoteTransition = null, displayChange = null, flags = 0, debugId = 11 }
10:28:35.446 3589-3589 Pine pid-3589 D Hooking method protected native void com.android.settings.homepage.SettingsHomepageActivity.onCreate(android.os.Bundle) with callback com.fundot.p4bu.ii.hook.classs.HookSettingsHomepageActivity33$1@78e85d9
10:28:35.447 3589-3589 P4buHookSettingsManager pid-3589 D =======hookSearchTitle===android 13.0 HookSettingsHomepageActivity33 Pine=====

以下是源码

public class HookSettingsHomepageActivity33 {
private static final String TAG = "HookSettingsHomepageActivity";

public static void hookSettingsHomepageActivity(ClassLoader classLoader) throws Exception {
Pine.ensureInitialized();
Pine.setJitCompilationAllowed(false);
Pine.disableHiddenApiPolicy(true, true);

Class homepageClass = Class.forName(
"com.android.settings.homepage.SettingsHomepageActivity",
true,
classLoader
);
Method onCreateMethod = homepageClass.getDeclaredMethod("onCreate", Bundle.class);
onCreateMethod.setAccessible(true);
Pine.hook(onCreateMethod, new MethodHook() {
@Override
public void afterCall(Pine.CallFrame callFrame) {
LogUtils.d(TAG, "onCreate");
hideHomepageSearch(callFrame.thisObject);
}
});
}

private static void hideHomepageSearch(Object me) {
try {
Activity activity = (Activity) me;
View mContextualCardsContent = activity.getWindow().getDecorView()
.findViewById(activity.getResources().getIdentifier(
"contextual_cards_content", "id", "com.android.settings"));
if (mContextualCardsContent != null) {
mContextualCardsContent.setVisibility(View.GONE);
}
View searchActionBar = activity.findViewById(activity.getResources().getIdentifier(
"search_action_bar", "id", "com.android.settings"));
if (searchActionBar != null) {
final ViewGroup parent = (ViewGroup) searchActionBar.getParent();
if (parent != null) {
parent.setVisibility(View.GONE);
}
}
View searchActionBarTitle = activity.findViewById(activity.getResources().getIdentifier(
"search_bar_container", "id", "com.android.settings"));
if (searchActionBarTitle != null) {
final ViewGroup parent = (ViewGroup) searchActionBarTitle.getParent();
if (parent != null) {
parent.setVisibility(View.GONE);
}
}
} catch (Throwable throwable) {
LogUtils.e(TAG, "hideHomepageSearch failed", throwable);
}
}
}

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the Pine hook path shown in the stack trace, especially Pine.callBackupMethod, Pine$CallFrame.invokeOriginalMethod, and Pine.handleCall. Reproduce the Android 15 failure while hooking SettingsHomepageActivity.onCreate and inspect the reported UnsatisfiedLinkError. Done means the hook no longer crashes the Settings process and the original method can be invoked successfully.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
devtools, mobile-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.