Skip to content

Commit 46b6447

Browse files
committed
修复android12主进程调用插件定义的contentprovider时ANR问题
1 parent 9c6d6e4 commit 46b6447

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

FairyPlugin/src/main/java/com/limpoxe/fairy/core/android/HackContentProviderHolder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ public class HackContentProviderHolder {
1313
private static final String ClassName = "android.app.IActivityManager$ContentProviderHolder";
1414
private static final String ClassName8 = "android.app.ContentProviderHolder";
1515

16+
private static final String Field_mLocal = "mLocal";
17+
1618
private Object instance;
1719

1820
public HackContentProviderHolder(Object instance) {
@@ -27,4 +29,9 @@ public static Object newInstance(ProviderInfo info) {
2729
}
2830
}
2931

32+
public void setLocal(boolean local) {
33+
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
34+
RefInvoker.setField(instance, ClassName8, Field_mLocal, local);
35+
}
36+
}
3037
}

FairyPlugin/src/main/java/com/limpoxe/fairy/core/proxy/systemservice/AndroidAppIActivityManager.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ private void tryWakeupBeforeCallPluginProvider(final String auth) {
249249
if (!isrunning) {
250250
LogUtil.d("getContentProvider", "not running, wakeup", pluginDescriptor.getPackageName());
251251
PluginManagerHelper.wakeup(pluginDescriptor.getPackageName());
252-
//TODO 这里时许仍然晚了一步 可能是因为wakeup异步执行的原因
252+
//TODO 这里时序仍然晚了一步 可能是因为wakeup异步执行的原因
253253
}
254254
break;
255255
}
@@ -337,7 +337,7 @@ private Object tryInstallProxyForCallerProcess(final Object invokeResult, final
337337
providerInfo.name = ProviderClientUnsafeProxy.class.getName();
338338
providerInfo.packageName = FairyGlobal.getHostApplication().getPackageName();
339339
Object holder = HackContentProviderHolder.newInstance(providerInfo);
340-
340+
new HackContentProviderHolder(holder).setLocal(true);
341341
if (holder != null) {
342342
//返回代理Provider
343343
return holder;
@@ -405,6 +405,7 @@ private Object tryReInstallPluginContentProvider(final Object invokeResult, fina
405405
LogUtil.w("providerInfo packageName ", pluginDescriptor.getPackageName(), providerInfo.packageName, auth);
406406

407407
Object holder = HackContentProviderHolder.newInstance(providerInfo);
408+
new HackContentProviderHolder(holder).setLocal(true);
408409
if (holder != null) {
409410
return holder;
410411
} else {

0 commit comments

Comments
 (0)