Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DroidPlugin 占坑太多,PacageManager调用,FAILED BINDER TRANSACTION #331

Open
SheepYoung opened this issue Mar 27, 2017 · 5 comments

Comments

@SheepYoung
Copy link

如题,升级配置如下:
gradle-wrapper.properties:
distributionUrl=https://services.gradle.org/distributions/gradle-3.4.1-all.zip

build.gradle:
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0'
}

原来使用配置是wrapper 2.10 build.gradle: 2.0 ,一切正常,升级后,能安装,但是运行,StrartActiviti的时候,报错:
Caused by: java.lang.RuntimeException: 没有可用的进程了

W/System.err: at com.morgoo.droidplugin.am.MyActivityManagerService.throwException(MyActivityManagerService.java:228)
03-27 19:19:05.925 15967-15967/com.microvideo.mivi W/System.err: at com.morgoo.droidplugin.am.MyActivityManagerService.selectStubActivityInfo(MyActivityManagerService.java:379)
03-27 19:19:05.925 15967-15967/com.microvideo.mivi W/System.err: at com.morgoo.droidplugin.pm.IPluginManagerImpl.selectStubActivityInfo(IPluginManagerImpl.java:1118)
03-27 19:19:05.925 15967-15967/com.microvideo.mivi W/System.err: at com.morgoo.droidplugin.pm.IPluginManagerImpl.selectStubActivityInfoByIntent(IPluginManagerImpl.java:1134)
03-27 19:19:05.926 15967-15967/com.microvideo.mivi W/System.err: at com.morgoo.droidplugin.pm.PluginManager.selectStubActivityInfo(PluginManager.java:660)
03-27 19:19:05.926 15967-15967/com.microvideo.mivi W/System.err: at com.morgoo.droidplugin.hook.handle.IActivityManagerHookHandle.selectProxyActivity(IActivityManagerHookHandle.java:2102)
.........

03-27 19:19:05.927 15967-15967/com.microvideo.mivi W/System.err: at com.morgoo.droidplugin.am.MyActivityManagerService.throwException(MyActivityManagerService.java:229)

出现的机器与系统: Nexus 6p android 6.0 / 华为 M8 android.6.0 / 三星 Note 3 android 5.0

使用7.0 机器,貌似正常(华为p9 plus android 7.0)

我debug 到:

StaticProcessList.onCreate:
PackageManager pm = mHostContext.getPackageManager();
List activities = pm.queryIntentActivities(intent, PackageManager.GET_META_DATA);
for (ResolveInfo activity : activities) {
addActivityInfo(activity.activityInfo);
}

拿到的activities 为 0

@SheepYoung
Copy link
Author

StaticProcessList.onCreate:
PackageManager pm = mHostContext.getPackageManager();
List activities = pm.queryIntentActivities(intent, PackageManager.GET_META_DATA);
有时候在调用 pm.queryIntentActivities的时候,报了异常:
android.os.DeadObjectException: Transaction failed on small parcel; remote process probably died

@SheepYoung
Copy link
Author

SheepYoung commented Mar 28, 2017

经过测试分析,怀疑这个问题跟两个因素有关:
1.instant run
2.androidManifest.xml application 节点上加metadata(我们app接入了阿里百川的hotfix,需要添加metadata,刚开始,我怀疑与hotfix的hook冲突,后台我尝试将接入hotfix的代码去掉了, 依赖也去掉了,只留下metadata,结果发现还是不行,我直接注释掉metadata,一切正常)
附上hotfix接入指南:http:https://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.QAJGSr&treeId=234&articleId=106531&docType=1

@SheepYoung
Copy link
Author

进一步分析,通过svn提交update to version 一个个关键提交测试, 发现接入了阿里的hotfix之后,开始出现这个问题,应该是metadata太长了(这里有一个metadata字段是ras key,单单字符串就1.9K个字符),导致远程packageManager 调用超过了1M,这个可能就是压死骆驼的最后一把稻草了,这个是根本的原因!因此我现在的解决方案是,将DroidPlugin的manifest 原来又9个进程的坑,我现在删掉了5个,暂时解决了该问题。
前面说到的, pm.queryIntentActivities(intent, PackageManager.GET_META_DATA); 有拿到0的情况,估计是机器的兼容性问题,我现在这样修改了之后,所有的机器都OK了。
重现方案很简单,就是在demo中作死的添加 metadata节点,value 的size大一点,加个上百个,然后这个就会出现:
IPluginManagerImpl: mActivityManagerService.onCreatejava.lang.RuntimeException: Package manager has died at android.app.ApplicationPackageManager.queryIntentActivitiesAsUser(ApplicationPackageManager.java:657) at android.app.ApplicationPackageManager.queryIntentActivities(ApplicationPackageManager.java:643) at com.morgoo.droidplugin.am.StaticProcessList.onCreate(StaticProcessList.java:108) at com.morgoo.droidplugin.am.MyActivityManagerService.onCreate(MyActivityManagerService.java:74) at com.morgoo.droidplugin.pm.IPluginManagerImpl.loadAllPlugin(IPluginManagerImpl.java:184) at com.morgoo.droidplugin.pm.IPluginManagerImpl.onCreateInner(IPluginManagerImpl.java:107) at com.morgoo.droidplugin.pm.IPluginManagerImpl.access$000(IPluginManagerImpl.java:75) at com.morgoo.droidplugin.pm.IPluginManagerImpl$1.run(IPluginManagerImpl.java:101) Caused by: android.os.DeadObjectException: Transaction failed on small parcel; remote process probably died at android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(Binder.java:503) at android.content.pm.IPackageManager$Stub$Proxy.queryIntentActivities(IPackageManager.java:3018) at java.lang.reflect.Method.invoke(Native Method) at com.morgoo.droidplugin.hook.proxy.ProxyHook.invoke(ProxyHook.java:56) at java.lang.reflect.Proxy.invoke(Proxy.java:393) at $Proxy21.queryIntentActivities(Unknown Source) at android.app.ApplicationPackageManager.queryIntentActivitiesAsUser(ApplicationPackageManager.java:651) at android.app.ApplicationPackageManager.queryIntentActivities(ApplicationPackageManager.java:643)  at com.morgoo.droidplugin.am.StaticProcessList.onCreate(StaticProcessList.java:108)  at com.morgoo.droidplugin.am.MyActivityManagerService.onCreate(MyActivityManagerService.java:74)  at com.morgoo.droidplugin.pm.IPluginManagerImpl.loadAllPlugin(IPluginManagerImpl.java:184)  at com.morgoo.droidplugin.pm.IPluginManagerImpl.onCreateInner(IPluginManagerImpl.java:107)  at com.morgoo.droidplugin.pm.IPluginManagerImpl.access$000(IPluginManagerImpl.java:75)  at com.morgoo.droidplugin.pm.IPluginManagerImpl$1.run(IPluginManagerImpl.java:101) 

@cmzy 这个问题点像dex 65535 一样,应用大了迟早都会遇到的,我这个方案也不是长久之计,看看有什么好的方案。

@SheepYoung SheepYoung changed the title 升级build tool 至 2.3 运行 插件carsh DroidPlugin 占坑太多,PacageManager调用,FAILED BINDER TRANSACTION Mar 29, 2017
@cmzy
Copy link
Member

cmzy commented Mar 30, 2017

这个确实是个问题,Binder传输数据不能太大,我得想办法处理下。

@weijianfeng
Copy link

我也遇到的了同样问题,也通过修改坑位数量的方式暂时解决,期待大神的完备方案

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants