Giter VIP home page Giter VIP logo

droidplugin's People

Contributors

alancheen avatar anzyhui avatar cmzy avatar codehz avatar dustookk avatar htynkn avatar jackcho avatar linchaolong avatar liuchenx avatar markzhai avatar mikesongming avatar qihoo360github avatar seventhmoon avatar smartyuge avatar wywlds avatar xingjiyuan avatar yurushao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

droidplugin's Issues

无法启动插件

成功安装插件后,打开插件为何一直报插件main activity没注册的错误?请问插件还要做什么特殊处理?

奇数次数打不开

奇数次数卡在加载中界面,用的是最新代码,authorities修改前与修改后都一样

错误日志

09-08 16:29:06.064 193-598/? E/Parcel﹕ Reading a NULL string not supported here.
09-08 16:29:06.064 193-598/? E/CameraService﹕ CameraService::connect X (pid 11939) rejected (don't trust clientUid)
09-08 16:29:06.064 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ java.lang.SecurityException: Lacking privileges to access camera service
09-08 16:29:06.065 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at android.hardware.camera2.utils.CameraBinderDecorator$CameraBinderDecoratorListener.onAfterInvocation(CameraBinderDecorator.java:72)
09-08 16:29:06.065 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at android.hardware.camera2.utils.Decorator.invoke(Decorator.java:81)
09-08 16:29:06.065 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at $Proxy13.addListener(Native Method)
09-08 16:29:06.065 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at android.hardware.camera2.CameraManager.(CameraManager.java:83)
09-08 16:29:06.065 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at android.app.ContextImpl$42.createService(ContextImpl.java:585)
09-08 16:29:06.065 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at android.app.ContextImpl$ServiceFetcher.getService(ContextImpl.java:263)
09-08 16:29:06.065 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
09-08 16:29:06.065 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
09-08 16:29:06.065 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at com.morgoo.droidplugin.core.PluginProcessManager.fakeSystemServiceInner(PluginProcessManager.java:410)
09-08 16:29:06.065 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at com.morgoo.droidplugin.core.PluginProcessManager.fakeSystemService(PluginProcessManager.java:446)
09-08 16:29:06.065 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at com.morgoo.droidplugin.hook.handle.PluginInstrumentation.callActivityOnCreate(PluginInstrumentation.java:71)
09-08 16:29:06.065 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2151)
09-08 16:29:06.065 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236)
09-08 16:29:06.066 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:138)
09-08 16:29:06.066 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
09-08 16:29:06.066 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
09-08 16:29:06.066 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at android.os.Looper.loop(Looper.java:136)
09-08 16:29:06.066 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5014)
09-08 16:29:06.066 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
09-08 16:29:06.067 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
09-08 16:29:06.067 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:806)
09-08 16:29:06.067 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
09-08 16:29:06.068 11939-11939/com.example.TestPlugin:PluginP02 W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
09-08 16:29:06.080 11939-11939/com.example.TestPlugin:PluginP02 I/dalvikvm-heap﹕ Grow heap (frag case) to 28.832MB for 1048592-byte allocation
09-08 16:29:06.115 11939-11939/com.example.TestPlugin:PluginP02 I/dalvikvm-heap﹕ Grow heap (frag case) to 39.605MB for 8294416-byte allocation
09-08 16:29:06.234 11939-11939/com.example.TestPlugin:PluginP02 I/dalvikvm-heap﹕ Grow heap (frag case) to 48.309MB for 8294416-byte allocation
09-08 16:29:06.531 11939-11939/com.example.TestPlugin:PluginP02 I/dalvikvm-heap﹕ Grow heap (frag case) to 64.134MB for 8294416-byte allocation

宿主程序由zygote64启动,而插件apk中只有armabi平台的so库。则报dlopen failed错误。

前提:arm64位手机运行Android5.1.1操作系统,TestPlugin程序由 Zygote64启动,但是Apk插件只有armabi的so库,并能正确安装。但是在启动过程中报错。

报错:
09-21 19:34:42.751: E/art(21056): dlopen("/data/data/com.example.TestPlugin/Plugin/com.lspr/lib/libLSPR.so", RTLD_LAZY) failed: dlopen failed: "/data/data/com.example.TestPlugin/Plugin/com.lspr/lib/libLSPR.so" is 32-bit instead of 64-bit

原因:so库和宿主程序应该运行在同一平台,32位或者64位手机系统。
DroidPlugin程序出错原因,没有避免这种情况出现。经调试发现:IPluginManagerImpl.java中 private String findSoPath(Set soPaths) 函数处理有问题。


private String findSoPath(Set soPaths) {
System.out.println("findSoPath:soPaths----->>>" + soPaths);
System.out.println("findSoPath:soPaths:CPU_ABI----->>>" + Build.CPU_ABI);
System.out.println("findSoPath:soPaths:CPU_ABI2---->>>" + Build.CPU_ABI2);
if (soPaths != null && soPaths.size() > 0) {
for (String soPath : soPaths) {
if (soPath.contains(Build.CPU_ABI)) {
System.out.println("1:ERROR:soPath:" + soPath);
return soPath;
}
}
for (String soPath : soPaths) {
if (soPath.contains(Build.CPU_ABI2)) {
System.out.println("2:ERROR:soPath:" + soPath);
return soPath;
}
}
}
return null;
}


随机加载Build.CPU_ABI2 有可能为""; 这样soPath.contains(Build.CPU_ABI2)一定为真;

Android系统是5.1.1
_Android.os.Build.java_*****************************
static {
/*
* Adjusts CPU_ABI and CPU_ABI2 depending on whether or not a given process is 64 bit.
* 32 bit processes will always see 32 bit ABIs in these fields for backward
* compatibility.
*/
final String[] abiList;
if (VMRuntime.getRuntime().is64Bit()) {
abiList = SUPPORTED_64_BIT_ABIS;
} else {
abiList = SUPPORTED_32_BIT_ABIS;
}

    CPU_ABI = abiList[0];
    if (abiList.length > 1) {
        CPU_ABI2 = abiList[1];
    } else {
        CPU_ABI2 = "";
    }

log记录


09-24 20:05:16.252: I/System.out(8480): copyNativeLibs:nativeLibraryDir:/data/data/com.example.TestPlugin/Plugin/com.lspr/lib
09-24 20:05:16.252: I/System.out(8480): copyNativeLibs:apkfile:/data/data/com.example.TestPlugin/Plugin/com.lspr/apk/base-1.apk
09-24 20:05:16.254: I/System.out(8480): findSoPath:soPaths----->>>[lib/armeabi-v7a/libLSPR.so, lib/armeabi/libLSPR.so]
09-24 20:05:16.254: I/System.out(8480): findSoPath:soPaths:CPU_ABI----->>>arm64-v8a
09-24 20:05:16.254: I/System.out(8480): findSoPath:soPaths:CPU_ABI2---->>>
09-24 20:05:16.254: I/System.out(8480): 2:ERROR:soPath:lib/armeabi-v7a/libLSPR.so
09-24 20:05:16.254: I/System.out(8480): return soPath:lib/armeabi-v7a/libLSPR.so
09-24 20:05:16.254: I/System.out(8480): copyNativeLibs:file:-->>/data/data/com.example.TestPlugin/Plugin/com.lspr/lib/libLSPR.so


请教一个问题,我按照搭建思路去搭建了,但是调用插件的时候老报错 走到这个停止Plugin Package Manager Service not be connect

Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.droidplugin.test.main/com.droidplugin.plus.MainActivity}; have you declared this activity in your AndroidManifest.xml?
09-23 09:55:21.203 30651-30651/com.droidplugin.test.main E/AndroidRuntime: at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1628)
09-23 09:55:21.203 30651-30651/com.droidplugin.test.main E/AndroidRuntime: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)
09-23 09:55:21.203 30651-30651/com.droidplugin.test.main E/AndroidRuntime: at android.app.Activity.startActivityForResult(Activity.java:3424)
09-23 09:55:21.203 30651-30651/com.droidplugin.test.main E/AndroidRuntime: at android.app.Activity.startActivityForResult(Activity.java:3385)
09-23 09:55:21.203 30651-30651/com.droidplugin.test.main E/AndroidRuntime: at com.droidplugin.test.main.MainActivity.goPlus(MainActivity.java:53)

关于运行插件的一些问题

看起来是没有处理宿主的启动应用的问题。。。

com.example.TestPlugin E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.TestPlugin, PID: 9840
    android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.inputmethod.latin/com.android.inputmethod.latin.setup.SetupActivity}; have you declared this activity in your AndroidManifest.xml?
            at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1777)
            at android.app.Instrumentation.execStartActivity(Instrumentation.java:1501)
            at android.app.Activity.startActivityForResult(Activity.java:3745)
            at android.app.Activity.startActivityForResult(Activity.java:3706)
            at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:826)
            at android.support.v4.app.Fragment.startActivity(Fragment.java:896)
            at com.example.TestPlugin.InstalledFragment.onListItemClick(InstalledFragment.java:51)
            at com.example.TestPlugin.InstalledFragment$3$1.onClick(InstalledFragment.java:147)
            at android.view.View.performClick(View.java:4781)
            at android.view.View$PerformClick.run(View.java:19873)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

JDK 1.6 编译失败

由于老项目需要使用JDK1.6 出现如下两个错误。盼望解决。
Cannot cast from Object to int MyActivityManagerService.java
'<>' operator is not allowed for source level below 1.7 StaticProcessList.java

Uploading jdk16.jpg…

在主activity中调用installPackage返回-1

我manifest文件如下:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:name="com.morgoo.droidplugin.PluginApplication">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

主activity代码如下:
@OverRide
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String pluginSrcDir = sdcard + "/Download/SimpleGame.apk";

    if (fileIsExists(pluginSrcDir)) {
        try {
            PluginManager.getInstance().installPackage(pluginSrcDir, 0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    } else {
        startMainActivity();
    }
}

然后我跟代码的时候发现 在调用installPackage的时候 应为这个时候PluginManager的onServiceConnected还没有返回从而mPluginManager值还是为null 导致installPackage返回-1,

但是我加上PluginManager.getInstance().waitForConnected();的话 程序又会卡死 这个该如何避免啊

对使用Alarm Manager的Service的支持有问题

问题是这样:
我现在有一个Service,为了保持长连,使用Alarm Manager:

        PendingIntent pi = PendingIntent.getService(this, 0, i,
                PendingIntent.FLAG_UPDATE_CURRENT);
        alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
                System.currentTimeMillis() + KEEP_ALIVE_INTERVAL,
                KEEP_ALIVE_INTERVAL, pi);

在PendingIntent.getService方法里面会调用到

            IIntentSender target =
                ActivityManagerNative.getDefault().getIntentSender(
                    ActivityManager.INTENT_SENDER_SERVICE, packageName,
                    null, null, requestCode, new Intent[] { intent },
                    resolvedType != null ? new String[] { resolvedType } : null,
                    flags, null, UserHandle.myUserId());

这个方法已经被hook了,我们会把它做替换,在IActivityManagerHookHandle.java

 //这里我们用新的逻辑,将原来的PendingIntent.getXXX(XXX,XXX, Intent, XXX)全部替换成
 //PendingIntent.getService(XXX,XXX,intetn,XXX)
 //这样系统在处理的时候,会先调用到我们的中转服务,我们的中转服务再来处理这个事情。
Intent replaced = replace(type, intent);
        private Intent replace(int type, Intent intent) throws RemoteException {
            if (type == ActivityManagerCompat.INTENT_SENDER_SERVICE) {
                ServiceInfo a = resolveService(intent);
                if (a != null && isPackagePlugin(a.packageName)) {
                    Intent newIntent = new Intent(mHostContext, PluginManagerService.class);
                    newIntent.putExtra(Env.EXTRA_TARGET_INTENT, intent);
                    newIntent.putExtra(Env.EXTRA_TYPE, type);
                    newIntent.putExtra(Env.EXTRA_ACTION, "PendingIntent");
                    return newIntent;
                }
            } else if (type == ActivityManagerCompat.INTENT_SENDER_ACTIVITY) {
                ActivityInfo a = resolveActivity(intent);
                if (a != null && isPackagePlugin(a.packageName)) {
                    Intent newIntent = new Intent(mHostContext, PluginManagerService.class);
                    newIntent.putExtra(Env.EXTRA_TARGET_INTENT, intent);
                    Log.e("wywdbg", "replace intent: %s", intent);
                    newIntent.putExtra(Env.EXTRA_TYPE, type);
                    newIntent.putExtra(Env.EXTRA_ACTION, "PendingIntent");
                    return newIntent;
                }
            }
            return null;
        }

但是在系统的getIntentSender方法中会复用原有的PendingIntent,然后将信息替换成新的,源代码如下:

       PendingIntentRecord.Key key = new PendingIntentRecord.Key(
                type, packageName, activity, resultWho,
                requestCode, intents, resolvedTypes, flags, options, userId);
        WeakReference<PendingIntentRecord> ref;
        ref = mIntentSenderRecords.get(key);
        PendingIntentRecord rec = ref != null ? ref.get() : null;
        if (rec != null) {
            if (!cancelCurrent) {
                if (updateCurrent) {
                    if (rec.key.requestIntent != null) {
                        rec.key.requestIntent.replaceExtras(intents != null ?
                                intents[intents.length - 1] : null);
                    }
                    if (intents != null) {
                        intents[intents.length-1] = rec.key.requestIntent;
                        rec.key.allIntents = intents;
                        rec.key.allResolvedTypes = resolvedTypes;
                    } else {
                        rec.key.allIntents = null;
                        rec.key.allResolvedTypes = null;
                    }
                }
                return rec;
            }
            rec.canceled = true;
            mIntentSenderRecords.remove(key);
        }
        if (noCreate) {
            return rec;
        }
        rec = new PendingIntentRecord(this, key, callingUid);
        mIntentSenderRecords.put(key, rec.ref);
        if (type == ActivityManager.INTENT_SENDER_ACTIVITY_RESULT) {
            if (activity.pendingResults == null) {
                activity.pendingResults
                        = new HashSet<WeakReference<PendingIntentRecord>>();
            }
            activity.pendingResults.add(rec.ref);
        }
        return rec;

由于我们统一换成了先从PluginManagerService中转,这样就会出现已经注册在AlarmManager里面的PendingIntent在这种时候被修改了,导致打开的不是我们想注册打开的service而是后面调用到PendingIntent.getService的其他组件,比如说一个通知栏注册点击事件时的PendingIntent(这种通常是会打开Activity的)。

不知道作者有什么好的解决方案。

修改provider的authorities后第一次无法打开

不修改authorities的话是正常的,修改之后第一次进就停在加载界面不动了,退出再进的话又正常可以进去了,但是清理内存进程后,又跟上面一样了,需要两次才能进入,这个是怎么回事呢

加载了droidPlugin的宿主,在启动一个未安装的插件的service时, 首次启动失败

宿主里启动未安装的插件service(AndroidManifest里声明exported=true), 没反应.
第2次以后才可以启动.

具体过程:

  1. 插件里有个service,
  2. 宿主在PluginManager.getInstance().isConnected()之后查询插件,
    然后PluginManager.getInstance().installPackage(),
    之后要启动插件的service, 此时service没被启动,
    Intent it = new Intent();
    it.setClassName("com.example.test2", "com.example.test2.Test2Service");
    mContext.startService(it);
  3. 再重复上面操作, 可以启动插件service

插件以快捷方式存在

插件以快捷方式存在, 只要启动过主程序,每次通过快捷方式启动插件,插件都会重启,而不会直接进入之前的插件界面。

插件快捷方式的创建

创建插件的快捷方式有问题呢,主程序未启动的情况下, 卡在加载界面不动了,退出,重进几次,才能好!
并且快捷方式的响应事件,是不是必须得经过主程序的跳转才行 ?

混淆问题

Warning: com.morgoo.droidplugin.hook.proxy.IActivityManagerHook$1: can't find superclass or interface android.util.Singleton
Warning: com.morgoo.droidplugin.hook.proxy.IActivityManagerHook$1: can't find referenced class android.util.Singleton
Warning: com.morgoo.droidplugin.hook.proxy.IActivityManagerHook$1: can't find referenced class android.util.Singleton
Warning: com.morgoo.droidplugin.hook.proxy.IActivityManagerHook$1: can't find referenced class android.util.Singleton
Warning: there were 4 unresolved references to classes or interfaces.
You may need to add missing library jars or update their versions.
If your code works fine without the missing classes, you can suppress
the warnings with '-dontwarn' options.
(http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)

Requires android.permission.INTERACT_ACROSS_USERS_FULL

18:24:34.933 7015-7702/? E/DatabaseUtils﹕ Writing exception to parcel
java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13077)
at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2021)
at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:577)
at android.content.ContentProvider$Transport.call(ContentProvider.java:279)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273)
at android.os.Binder.execTransact(Binder.java:388)
at dalvik.system.NativeStart.run(Native Method)

IPluginManager:can't find import class

Droid Plugin的library中,IPluginManager中关于以下的引用会提示can't find import class,如下图。
image
网上的资料提出要去修改framework层的frameworks/base/Android.mk。除此之外,您能否给一点帮助呢

installPackage 返回 -1 ???

    String filepath = "/data/data/com.goldflower.main/files/abc.apk";
    int installpackage;
    try {
        installpackage = PluginManager.getInstance().installPackage( filepath, 0);
        Debug.print("installpackage="+installpackage);
    } catch (RemoteException e) {
        e.printStackTrace();
    }

用源码中TestPlugin加载金山的wps.apk出现类型转换错误。

1:安装TestPlugin 加载其它apk 能正常运行。
2:单独安装wps.apk 能正常运行,并且可以打开ppt。
3:卸载wps.apk
4:通过插件加载wps.apk能正常加载,启动以后wps欢迎界面也出来了,显示wps主界面的时候出现如下错误。

09-17 05:22:47.272 238-567/? W/genymotion_audio﹕ out_write() limiting sleep time 46802 to 39909
09-17 05:22:47.288 12305-12305/com.example.TestPlugin:PluginP01 W/Bundle﹕ Key android.intent.extra.TEXT expected ArrayList but value was a java.lang.String. The default value was returned.
09-17 05:22:47.288 12305-12305/com.example.TestPlugin:PluginP01 W/Bundle﹕ Attempt to cast generated internal exception:
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.ArrayList
at android.os.Bundle.getCharSequenceArrayList(Bundle.java:1367)
at android.content.Intent.getCharSequenceArrayListExtra(Intent.java:4736)
at android.content.Intent.migrateExtraStreamToClipData(Intent.java:7252)
at android.content.Intent.migrateExtraStreamToClipData(Intent.java:7219)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1417)
at android.app.Activity.startActivityForResult(Activity.java:3424)
at android.app.Activity.startActivityForResult(Activity.java:3385)
at android.app.Activity.startActivity(Activity.java:3627)
at android.app.Activity.startActivity(Activity.java:3595)
at ckg.a(Unknown Source)
at cn.wps.moffice.crash.CrashActivity.a(Unknown Source)
at cn.wps.moffice.crash.CrashActivity$1.go(Unknown Source)
at ckj$2.onClick(Unknown Source)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)

宿主和插件各有一个activity, 首次启动插件的activity时候会弹出一个白屏"努力加载中.."

启动了ActivityStub$StandardP02, 白屏,显示"努力加载中"...., 怎么去掉这一屏啊?

10-14 18:31:31.872 E/Learn_MainActivity(22493): ===========onCreate()===========
10-14 18:31:31.872 D/Learn_MainActivity(22493): onCreate()
10-14 18:31:31.892 I/Timeline(22493): Timeline: Activity_launch_request id:com.example.TestPlugin time:1098757655
10-14 18:31:31.892 I/ThermalEngine( 383): Sensor:batt_temp:369 mC
10-14 18:31:31.892 I/ActivityManager( 1168): START u0 {cmp=com.example.TestPlugin/com.morgoo.droidplugin.stub.ActivityStub$StandardP02 (has extras)} from pid 22493
10-14 18:31:31.902 V/PhoneStatusBar( 1270): setLightsOn(true)
10-14 18:31:31.912 I/Learn_MainActivity(22493): onResume()
10-14 18:31:31.962 V/CameraServiceListener(22493): Camera id 0 has status changed to 0x1
10-14 18:31:31.962 V/CameraServiceListener(22493): Camera id 1 has status changed to 0x1
10-14 18:31:31.972 D/Learn_Activity2(22493): Activity2 onCreate()
10-14 18:31:31.972 I/Learn_Activity2(22493): onResume()
10-14 18:31:32.012 I/Adreno-EGL(22493): <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: ()
10-14 18:31:32.012 I/Adreno-EGL(22493): OpenGL ES Shader Compiler Version: E031.24.00.15
10-14 18:31:32.012 I/Adreno-EGL(22493): Build Date: 04/07/15 Tue
10-14 18:31:32.012 I/Adreno-EGL(22493): Local Branch:
10-14 18:31:32.012 I/Adreno-EGL(22493): Remote Branch:
10-14 18:31:32.012 I/Adreno-EGL(22493): Local Patches:
10-14 18:31:32.012 I/Adreno-EGL(22493): Reconstruct Branch:
10-14 18:31:32.052 D/OpenGLRenderer(22493): Enabling debug mode 0
10-14 18:31:32.072 D/AppOps ( 1168): checkOperation :code 24 uid 10306 package com.baidu.input
10-14 18:31:32.102 I/Timeline(22493): Timeline: Activity_idle id: android.os.BinderProxy@431aad20 time:1098757867
10-14 18:31:32.102 I/Timeline(22493): Timeline: Activity_idle id: android.os.BinderProxy@42f52e50 time:1098757867
10-14 18:31:32.122 I/ActivityManager( 1168): Displayed com.example.TestPlugin/com.morgoo.droidplugin.stub.ActivityStub$StandardP02: +194ms (total +573ms)

应用重复启动问题怎么解决啊?

插件与插件,插件与宿主之间的互相调用会导致应用(或者页面)的重复启动,使用各种lanuchMode和flag都无效,不知道要怎么实现单例?

插件化运行之后横竖屏的问题

我发现横竖屏切换的时候原来配置的android:configChanges="orientation|keyboardHidden|screenSize"不管用了,切换之后会重新调用onCreate,请问这是BUG么?

怎么木有使用文档?

使用文档啊,主程序可以中止子程序么forceStopPackage 跟killApplicationProcess 这两个方法都没用啊,停不掉。。。。

安装完插件有提示这个异常,第二次打开正常

09-08 11:40:57.612 193-598/? E/Parcel﹕ Reading a NULL string not supported here.
09-08 11:40:57.612 193-598/? E/CameraService﹕ CameraService::connect X (pid 15318) rejected (don't trust clientUid)
09-08 11:40:57.613 15318-15318/? W/System.err﹕ java.lang.SecurityException: Lacking privileges to access camera service
09-08 11:40:57.614 15318-15318/? W/System.err﹕ at android.hardware.camera2.utils.CameraBinderDecorator$CameraBinderDecoratorListener.onAfterInvocation(CameraBinderDecorator.java:72)
09-08 11:40:57.614 15318-15318/? W/System.err﹕ at android.hardware.camera2.utils.Decorator.invoke(Decorator.java:81)
09-08 11:40:57.615 15318-15318/? W/System.err﹕ at $Proxy13.addListener(Native Method)
09-08 11:40:57.615 15318-15318/? W/System.err﹕ at android.hardware.camera2.CameraManager.(CameraManager.java:83)
09-08 11:40:57.615 15318-15318/? W/System.err﹕ at android.app.ContextImpl$42.createService(ContextImpl.java:585)
09-08 11:40:57.616 15318-15318/? W/System.err﹕ at android.app.ContextImpl$ServiceFetcher.getService(ContextImpl.java:263)
09-08 11:40:57.616 15318-15318/? W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
09-08 11:40:57.616 15318-15318/? W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
09-08 11:40:57.616 15318-15318/? W/System.err﹕ at com.morgoo.droidplugin.core.PluginProcessManager.fakeSystemServiceInner(PluginProcessManager.java:410)
09-08 11:40:57.616 15318-15318/? W/System.err﹕ at com.morgoo.droidplugin.core.PluginProcessManager.fakeSystemService(PluginProcessManager.java:446)
09-08 11:40:57.616 15318-15318/? W/System.err﹕ at com.morgoo.droidplugin.hook.handle.PluginInstrumentation.callApplicationOnCreate(PluginInstrumentation.java:136)
09-08 11:40:57.617 15318-15318/? W/System.err﹕ at android.app.LoadedApk.makeApplication(LoadedApk.java:519)
09-08 11:40:57.617 15318-15318/? W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
09-08 11:40:57.617 15318-15318/? W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
09-08 11:40:57.617 15318-15318/? W/System.err﹕ at com.morgoo.droidplugin.reflect.MethodUtils.invokeMethod(MethodUtils.java:214)
09-08 11:40:57.617 15318-15318/? W/System.err﹕ at com.morgoo.droidplugin.reflect.MethodUtils.invokeMethod(MethodUtils.java:246)
09-08 11:40:57.618 15318-15318/? W/System.err﹕ at com.morgoo.droidplugin.core.PluginProcessManager.preMakeApplication(PluginProcessManager.java:256)
09-08 11:40:57.618 15318-15318/? W/System.err﹕ at com.morgoo.droidplugin.core.PluginProcessManager.preLoadApk(PluginProcessManager.java:212)
09-08 11:40:57.618 15318-15318/? W/System.err﹕ at com.morgoo.droidplugin.hook.handle.PluginCallback.handleLaunchActivity(PluginCallback.java:380)
09-08 11:40:57.619 15318-15318/? W/System.err﹕ at com.morgoo.droidplugin.hook.handle.PluginCallback.handleMessage(PluginCallback.java:251)
09-08 11:40:57.620 15318-15318/? W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:98)
09-08 11:40:57.620 15318-15318/? W/System.err﹕ at android.os.Looper.loop(Looper.java:136)
09-08 11:40:57.620 15318-15318/? W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5014)
09-08 11:40:57.620 15318-15318/? W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
09-08 11:40:57.620 15318-15318/? W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
09-08 11:40:57.620 15318-15318/? W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:806)
09-08 11:40:57.621 15318-15318/? W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
09-08 11:40:57.621 15318-15318/? W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)

installpackage返回-1

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

            File file = new File(Environment.getExternalStorageDirectory(), "runapk");
            if (file.exists() && file.isDirectory()) {
                for (File apk : file.listFiles()) {
                    if (apk.exists() && apk.getPath().toLowerCase().endsWith(".apk")) {
                        try {
                            int a = PluginManager.getInstance().installPackage(apk.getPath(),0);
                            int c = a+1;
                        } catch (RemoteException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
            }


        Intent intent = getPackageManager().getLaunchIntentForPackage("org.ccca.launcher");

        if (intent != null) {

            startActivity(intent);
        } else {
            Toast.makeText(getApplicationContext(), "请下载安装这个APP", Toast.LENGTH_LONG).show();
        }
    }

开启了读取权限,文件里也有这个,可是installPackage返回一直是-1,并且也总是开启不了App,文件夹下是有apk文件的。这是为什么呢?

TestPlugin安装不了

Installing com.example.TestPlugin
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.example.TestPlugin"
pkg: /data/local/tmp/com.example.TestPlugin
Failure [INSTALL_FAILED_CONFLICTING_PROVIDER]

apk存在多个架构so库时存在时,需要分开拷贝

如果apk里面存在多个架构so库,IPluginManagerImpl里copyNativeLibs方法没有拷贝到对应文件夹下,会出现segment fault问题

for (String soName : soList.keySet()) {
Log.e(TAG, "==========so name=" + soName);
Set soPaths = soList.get(soName);
String soPath = findSoPath(soPaths);
//----分平台架构文件夹拷贝
String tmpSoPath = soPath;
tmpSoPath = tmpSoPath.replace("lib/","");
tmpSoPath = tmpSoPath.substring(0,tmpSoPath.indexOf('/'));
String tmpLibRootFolder = nativeLibraryDir + File.separator +tmpSoPath;

            if (soPath != null) {
                {
                    File file = new File(tmpLibRootFolder);
                    if(file.exists()){

                    }else{
                        file.mkdirs();
                    }
                }
                File file = new File(tmpLibRootFolder, soName);
                //----
                if (file.exists()) {
                    file.delete();
                }

......
.....
.....

插件间公用库问题?

1.demo中 TestPlugin 是把DroidPlugin库给compile编译进去了
compile project(':Libraries:DroidPlugin')
为何不用 provided?

2.不同插件之间能否共用 带有资源的库?
provided 只能对.jar包进行引用
而有共用资源的共有库怎么共享呢(drawable下的资源 values下的配置)?

关于使用自定义的Application

我遇到了一个问题: 在使用自定义的application时候, 应用启动总是失败,我就在TestPlugin里加入了自己的applicaition类,
public class MyApplication extends Application {

@Override
public void onCreate() {
    super.onCreate();
    PluginHelper.getInstance().applicationOnCreate(getBaseContext());

}

@Override
protected void attachBaseContext(Context base) {
    PluginHelper.getInstance().applicationAttachBaseContext(base);
}

}
, manifest里改成:

下面是log, 也查看了ContextWrapper.java, 发现mBase为空.
public PackageManager getPackageManager() {
return mBase.getPackageManager();
}

10-10 19:21:28.358 E/AndroidRuntime(18538): FATAL EXCEPTION: main
10-10 19:21:28.358 E/AndroidRuntime(18538): Process: com.example.TestPlugin, PID: 18538
10-10 19:21:28.358 E/AndroidRuntime(18538): java.lang.NullPointerException
10-10 19:21:28.358 E/AndroidRuntime(18538): at android.content.ContextWrapper.getPackageName(ContextWrapper.java:135)
10-10 19:21:28.358 E/AndroidRuntime(18538): at android.app.ActivityThread.installProvider(ActivityThread.java:4784)
10-10 19:21:28.358 E/AndroidRuntime(18538): at android.app.ActivityThread.installContentProviders(ActivityThread.java:4413)
10-10 19:21:28.358 E/AndroidRuntime(18538): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4353)
10-10 19:21:28.358 E/AndroidRuntime(18538): at android.app.ActivityThread.access$1500(ActivityThread.java:141)
10-10 19:21:28.358 E/AndroidRuntime(18538): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
10-10 19:21:28.358 E/AndroidRuntime(18538): at android.os.Handler.dispatchMessage(Handler.java:102)
10-10 19:21:28.358 E/AndroidRuntime(18538): at android.os.Looper.loop(Looper.java:136)
10-10 19:21:28.358 E/AndroidRuntime(18538): at android.app.ActivityThread.main(ActivityThread.java:5047)
10-10 19:21:28.358 E/AndroidRuntime(18538): at java.lang.reflect.Method.invokeNative(Native Method)
10-10 19:21:28.358 E/AndroidRuntime(18538): at java.lang.reflect.Method.invoke(Method.java:515)
10-10 19:21:28.358 E/AndroidRuntime(18538): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
10-10 19:21:28.358 E/AndroidRuntime(18538): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
10-10 19:21:28.358 E/AndroidRuntime(18538): at dalvik.system.NativeStart.main(Native Method)
10-10 19:21:28.358 W/ActivityManager( 1168): Force finishing activity com.example.TestPlugin/.MyActivity

WindowManager is not subClass of IBinder

非常感谢360公司的插件开源,很牛!
个人在查看贵公司的源码时,发现IWindowManagerBinderHook是继承自BinderHook的,binderHook中关联的ServiceManagerCacheBinderHook中看到获取service是返回IBinder的,个人在查看系统获取window的service时,并不是基于IBinder的,个人查看的安卓源码是2.3.2r1,
ContextImpl的getSystemService中的windowManager是直接获取的WindowManagerImpl,而非基于binder的,所以个人认为如果使用到了这个场景的话,应该会crash的

@Override
public Object getSystemService(String name) {
    if (WINDOW_SERVICE.equals(name)) {
        return WindowManagerImpl.getDefault();
    } 
            ......
    return null;
}

在米4 4.4版本和红米4.2.2上总是出现停留在加载页面,表现为基数次都会停留在加载页面

一个很简单的测试demo,apk下载地址 http://www.pgyer.com/VCVx
不知道为什么2个log文件提交不上去,贴出来了只好

log1:
2015-10-12 02:36:06.234 9295-10329/? I/PluginCallback handleMessage(107,RESUME_ACTIVITY) cost 0 ms
2015-10-12 02:36:06.695 9295-10329/? I/HookedMethodHandler doHookInner method(com.android.internal.view.IInputMethodManager.windowGainedFocus) cost 6 ms
2015-10-12 02:36:08.942 9295-10329/? I/HookedMethodHandler doHookInner method(android.app.IActivityManager.getRunningAppProcesses) cost 21 ms
2015-10-12 02:36:08.983 9295-10329/? I/IPackageManagerHookHandle getPackageInfo(com.example.TestPlugin) fail,pkginfo is null
2015-10-12 02:36:09.009 9295-10329/? I/HookedMethodHandler doHookInner method(android.app.IActivityManager.startActivity) cost 92 ms
2015-10-12 02:36:09.025 9295-10329/? I/PluginCallback handleMessage(101,PAUSE_ACTIVITY) cost 1 ms
2015-10-12 02:36:09.168 9295-10329/? I/PluginCallback handleMessage(115,SERVICE_ARGS) cost 0 ms
2015-10-12 02:36:09.208 9295-10329/? I/HookedMethodHandler doHookInner method(android.app.IActivityManager.getRunningAppProcesses) cost 6 ms
2015-10-12 02:36:09.415 9295-10329/? I/PluginCallback handleMessage(104,STOP_ACTIVITY_HIDE) cost 0 ms
2015-10-12 02:36:12.181 9295-10329/? I/PluginCallback handleMessage(140,TRIM_MEMORY) cost 1 ms

log2:
2015-10-12 02:36:09.096 9727-10329/? E/PluginHelper getMainLooper MessageQueue.IdleHandler:{ when=-30ms what=100 obj=ActivityRecord{42dc87b8 token=android.os.BinderProxy@42dc7f30 {com.example.TestPlugin/com.morgoo.droidplugin.stub.ActivityStub$StandardP02}} target=android.app.ActivityThread$H }
2015-10-12 02:36:09.124 9727-10329/? W/IWindowManagerBinderHook onInstall writeStaticField to sWindowManager fail
java.lang.ClassNotFoundException: com.android.internal.policy.PhoneWindow$WindowManagerHolder
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:251)
at java.lang.Class.forName(Class.java:216)
at com.morgoo.droidplugin.hook.binder.IWindowManagerBinderHook.onInstall(IWindowManagerBinderHook.java:72)
at com.morgoo.droidplugin.hook.HookFactory.installHook(HookFactory.java:104)
at com.morgoo.droidplugin.hook.HookFactory.installHook(HookFactory.java:123)
at com.morgoo.droidplugin.core.PluginProcessManager.installHook(PluginProcessManager.java:297)
at com.morgoo.droidplugin.PluginHelper.initPlugin(PluginHelper.java:76)
at com.morgoo.droidplugin.PluginHelper.applicationOnCreate(PluginHelper.java:63)
at com.morgoo.droidplugin.PluginApplication.onCreate(PluginApplication.java:45)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4374)
at android.app.ActivityThread.access$1500(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1264)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5049)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoClassDefFoundError: com/android/internal/policy/PhoneWindow$WindowManagerHolder
... 22 more
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.internal.policy.PhoneWindow$WindowManagerHolder" on path: DexPathList[[zip file "/data/app/com.example.TestPlugin-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.TestPlugin-2, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
... 22 more

2015-10-12 02:36:09.149 9727-10329/? I/IActivityManagerHook Install ActivityManager Hook 2 old=android.app.ActivityManagerProxy@42dc6058,new=android.app.ActivityManagerProxy@42dc6058
2015-10-12 02:36:09.150 9727-10329/? E/IActivityManagerHook Install ActivityManager 3 Hook old=android.app.ActivityManagerProxy@42dc6058,new=android.app.ActivityManagerProxy@42dc6058
2015-10-12 02:36:09.151 9727-10329/? I/PluginCallbackHook PluginCallbackHook has installed
2015-10-12 02:36:09.153 9727-10329/? I/InstrumentationHook Install Instrumentation Hook old=android.app.Instrumentation android.app.ActivityThread.mInstrumentation,new=com.morgoo.droidplugin.hook.handle.PluginInstrumentation@42e8d2e0
2015-10-12 02:36:09.172 9727-10329/? I/PluginHelper Init plugin in process cost 79 ms
2015-10-12 02:36:09.173 9727-10329/? I/PluginCallback handleMessage(100,LAUNCH_ACTIVITY) cost 0 ms
2015-10-12 02:36:09.175 9727-10329/? W/IWindowManagerBinderHook fixWindowManagerHook writeStaticField to sWindowManager fail
java.lang.ClassNotFoundException: com.android.internal.policy.impl.MiuiPhoneWindow$WindowManagerHolder
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:251)
at java.lang.Class.forName(Class.java:216)
at com.morgoo.droidplugin.hook.binder.IWindowManagerBinderHook.fixWindowManagerHook(IWindowManagerBinderHook.java:83)
at com.morgoo.droidplugin.hook.handle.PluginInstrumentation.callActivityOnCreate(PluginInstrumentation.java:68)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2156)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2241)
at android.app.ActivityThread.access$800(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1204)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5049)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoClassDefFoundError: com/android/internal/policy/impl/MiuiPhoneWindow$WindowManagerHolder
... 17 more
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.internal.policy.impl.MiuiPhoneWindow$WindowManagerHolder" on path: DexPathList[[zip file "/data/app/com.example.TestPlugin-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.TestPlugin-2, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
... 17 more

2015-10-12 02:36:09.199 9727-10329/? I/PluginManager onServiceConnected connected OK!
2015-10-12 02:36:09.209 9727-10329/? I/PluginCallbackHook PluginCallbackHook has installed,skip
2015-10-12 02:36:09.210 9727-10329/? I/InstrumentationHook Instrumentation has installed,skip
2015-10-12 02:36:09.211 9727-10329/? I/PluginManager PluginManager ready!
2015-10-12 02:36:11.229 9727-10329/? I/PluginCallback handleMessage(101,PAUSE_ACTIVITY) cost 0 ms
2015-10-12 02:36:12.161 9727-10329/? I/PluginCallback handleMessage(104,STOP_ACTIVITY_HIDE) cost 0 ms
2015-10-12 02:36:12.183 9727-10329/? I/PluginCallback handleMessage(140,TRIM_MEMORY) cost 1 ms
2015-10-12 02:36:19.105 9727-10329/? I/PluginCallback handleMessage(132,ENABLE_JIT) cost 0 ms

关于修改authorities后,奇数次打不开的问题,及解决方法

关于修改authorities后,奇数次打不开的问题,花了我一天时间跟踪,解决办法:

修改PluginProcessManager类的120行,有这样的一个判断info.authority.indexOf("com.morgoo.droidplugin_stub") < 0),字符串替换为自己修改的authorities名称的统一前缀。自测修改后正常!

猜测原因,在判断在判断是否是插件进程时候,根据authorities的前缀做判断,然而在代码中只判断了默认的authorities,如果自己修改了authorities,这个判断就失效了。导致初始化过程耗时较长,在初始化完成前,PluginCallback就收到了LAUNCH_ACTIVITY消息,此时PluginCallback.mEnable 的值为false,没有执行PluginCallback.handleLaunchActivity()方法,界面就没有加载出来。

不知道分析的是否正确,还请开发团队关注

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.