Closed SpenceAcc closed 5 years ago
你把代码库贴出来我们才能讨论问题呀。
07-10 22:05:16.371 11454-11454/? W/Zygote: mz_is_rooted true
07-10 22:05:16.376 11454-11454/? I/art: Late-enabling -Xcheck:jni
07-10 22:05:16.396 11454-11468/? E/art: Failed sending reply to debugger: Broken pipe
07-10 22:05:16.401 11454-11468/? I/art: Debugger is no longer active
07-10 22:05:16.411 11454-11454/? D/Proxy: setHttpRequestCheckHandler
07-10 22:05:16.416 11454-11454/? E/System: stat file error, path is /data/app/com.tencent.shadow.sample.host-1/lib/arm, exception is android.system.ErrnoException: stat failed: ENOENT (No such file or directory)
07-10 22:05:16.436 11454-11454/? I/com.tencent.shadow.dynamic.host.PluginProcessService: onCreate:com.tencent.shadow.sample.host.PluginProcessPPS@11e70387
07-10 22:05:16.436 11454-11454/? I/com.tencent.shadow.dynamic.host.PluginProcessService: onBind:com.tencent.shadow.sample.host.PluginProcessPPS@11e70387
07-10 22:05:16.441 11454-11474/? I/com.tencent.shadow.dynamic.host.PluginProcessService: setUuidManager uuidManager==com.tencent.shadow.dynamic.host.BinderUuidManager@2edbca52
07-10 22:05:16.446 11454-11475/? I/com.tencent.shadow.dynamic.host.PluginProcessService: loadRuntime uuid:DC5977C9-9A73-4DFA-82CC-3C78FAF82BAF
07-10 22:05:16.466 11454-11475/? I/com.tencent.shadow.dynamic.host.PluginProcessService: loadPluginLoader uuid:DC5977C9-9A73-4DFA-82CC-3C78FAF82BAF mPluginLoader:null
07-10 22:05:16.471 11454-11475/? I/com.tencent.shadow.dynamic.host.PluginProcessService: 取出uuid==DC5977C9-9A73-4DFA-82CC-3C78FAF82BAF的Loader apk:/data/data/com.tencent.shadow.sample.host/files/ShadowPluginManager/UnpackedPlugin/test-dynamic-manager/cd208bfed1363e7034a7c4b92452803c/plugin-debug.zip/sample-loader-debug.apk
07-10 22:05:16.551 11454-11474/? I/com.tencent.shadow.core.loader.ShadowPluginLoader: start loadPlugin
07-10 22:05:16.771 11454-11454/? I/ARouter::: ARouter openLog[ ]
07-10 22:05:16.771 11454-11454/? I/ARouter::: ARouter openDebug[ ]
07-10 22:05:16.771 11454-11454/? I/ARouter::: ARouter init start.[ ]
07-10 22:05:16.771 11454-11454/? I/ARouter::: Run with debug mode or new install, rebuild router map.[ ]
07-10 22:05:16.776 11454-11454/? I/ARouter::: VM with name 'Android' has multidex support
07-10 22:05:16.776 11454-11454/? E/ARouter::: InstantRun support error, com.android.tools.fd.runtime.Paths
07-10 22:05:16.776 11454-11454/? I/ARouter::: Thread production, name is [ARouter task pool No.1, thread No.1][ ]
07-10 22:05:16.786 11454-11454/? D/ARouter::: Filter 0 classes by packageName
上面是plugin进程打印的日志,ARouter找不到对应的路由表。但是单独运行的时候是可以的。团队项目具体的代码不方便贴,我用sample接入ARouter的结果也和上面打印的日志一样。
sample接入ARouter的代码总是可以给大家看的嘛。你直接给我看看,免得我还得去研究ARouter怎么接、是干什么的。在Shadow的sample里接入,我就很方便的可以看到独立安装时的效果,和在插件环境下失败的情况。应该会比较容易发现问题的。
在Shadow的sample里接入的代码如下: 1、Shadow\projects\sample\sample-plugin\sample-app-lib\build.gradle
defaultConfig { minSdkVersion project.MIN_SDK_VERSION targetSdkVersion project.TARGET_SDK_VERSION versionCode project.VERSION_CODE versionName project.VERSION_NAME javaCompileOptions { annotationProcessorOptions { arguments = [AROUTER_MODULE_NAME: project.getName()] } } }
dependencies { implementation project(":slidingmenu") implementation project(":pinnedheaderexpandablelistview") implementation 'com.android.support:support-annotations:28.0.0' implementation 'com.android.support:support-v4:27.1.1' implementation 'com.alibaba:arouter-api:1.4.1' annotationProcessor 'com.alibaba:arouter-compiler:1.2.2' }
2、Shadow\projects\sample\sample-plugin\sample-app-lib\src\main\java\com\tencent\shadow\sample\plugin\app\lib\gallery\TestApplication.java
@Override
public void onCreate() {
sInstence = this;
isOnCreate = true;
super.onCreate();
if (BuildConfig.DEBUG) {
ARouter.openLog();
ARouter.openDebug();
}
ARouter.init(this);
UseCaseManager.initCase();
}
3、Shadow\projects\sample\sample-plugin\sample-app-lib\src\main\java\com\tencent\shadow\sample\plugin\app\lib\gallery\splash\SplashActivity.java
mSplashAnimation.setAnimationListener(new ISplashAnimation.AnimationListener() { @Override public void onAnimationEnd() { finish(); ARouter.getInstance().build("/main/MainActivity").navigation(); //startActivity(new Intent(SplashActivity.this, MainActivity.class)); } });
4、Shadow\projects\sample\sample-plugin\sample-app-lib\src\main\java\com\tencent\shadow\sample\plugin\app\lib\gallery\MainActivity.java
@Route(path = "/main/MainActivity") public class MainActivity extends Activity implements ExpandableListView.OnChildClickListener, ExpandableListView.OnGroupClickListener, OnHeaderUpdateListener, OnGiveUpTouchEventListener {
以上黑体部分为接入ARouter的代码。
我调试了一下,不支持ARoute主要有两个原因。
1.插件的context没有支持双参数的startActivity(Intent intent, Bundle options)方法。这个简单支持一下就好了。
2.插件中获取ApplicationInfo的实现没太设计好,从packageManager上getApplicationInfo获得的ApplicationInfo没有写入sourceDir
导致ARoute根据这个路径去Dex中找自己的类找不到。这个问题需要仔细Review一下多个getApplicationInfo
的实现,将它们统一起来。已经提了#40 记录。
git checkout -b sample_aroute dev
git pull https://github.com/shifujun/Shadow.git sample_aroute
做了一个临时修复。可以先看一下。
@SpenceAcc 这个问题解决了吗?解决了麻烦给个回复,方便其他开发者,谢谢
@SpenceAcc 这个问题解决了吗?解决了麻烦给个回复,方便其他开发者,谢谢
问题解决代码已经写好了。如果有空可以帮忙测一下,我自己已经测过了。在前面贴的我的sample_aroute分支上。我再找人交叉Review一下再合入。
抱歉,前两天身体不舒服,没能及时回复。 今天我尝试了修复问题的代码,发现并未生效。 验证步骤如下: 使用以下命令拉取代码 git checkout -b sample_aroute dev git pull https://github.com/shifujun/Shadow.git sample_aroute 当前代码已经是最新了,如下截图: 然后运行sample-host。效果与之前一直,ARouter提示找不到对应页面的path。
我也重新checkout了一个新分支,pull了一样的操作。
git checkout -b tmp1 dev
git pull https://github.com/shifujun/Shadow.git sample_aroute
确实没问题的。
你再检查一下是否执行的是新的代码。因为你截图的命令行不是Android Studio内置的,有没有可能CMD打开的目录和Android Studio打开的不是一个目录?你看看有没有我今天提交的代码。
我换了一台电脑重新拉了项目,验证ARouter在宿主模式下能支持了,非常感谢@shifujun。公司的项目我周一试试看。
抱歉,前两天身体不舒服,没能及时回复。 今天我尝试了修复问题的代码,发现并未生效。 验证步骤如下: 使用以下命令拉取代码 git checkout -b sample_aroute dev git pull https://github.com/shifujun/Shadow.git sample_aroute 当前代码已经是最新了,如下截图: 然后运行sample-host。效果与之前一直,ARouter提示找不到对应页面的path。
现在最新版本是可以在host进程使用Arouter了吗
https://github.com/shifujun/Shadow.git sample_aroute 我这边测试是可行的,并且在我的项目上使用androidx,ARouter.getInstance().build("/main/MainActivity").navigation() 也是可行的,但是在我的项目上使用androidx在.navigation()中添加回调,在启动插件时直接闪退,不知道有遇到的没
有遇到过这个问题吗?