Closed SheepYang1993 closed 5 years ago
我搜了一下Sample的代码中确实引用了27.0.2
和27.1.1
两个版本的support包,所以报这个错误应该是可以理解的。
但是你是怎么复现的呢?我最好复现一下,再改正这个问题。
你如果把
projects/sample/sample-plugin/third-party/slidingmenu/build.gradle
中的27.0.2
改成27.1.1
还能复现问题吗?
你如果把 projects/sample/sample-plugin/third-party/slidingmenu/build.gradle 中的
27.0.2
改成27.1.1
还能复现问题吗? 把slidingmenu/build.gradle中的27.0.2
改成27.1.1
还是会出现这个问题。
不确定是不是我加的sample问题,可能我的接入姿势不够标准= =。。
我这边是想引入一个sample测试,然后编译没问题,Run sample-host的时候就报错了。
导入的位置如下图:
然后在setting.gradle的includeSample()添加了配置:
include 'sample-sheep-app'
project(':sample-sheep-app').projectDir = file('projects/sample/sample-plugin/sample-sheep-app')
还有在sample-plugin-app的build.gradle中添加:
apply from: "../sample-sheep-app/build.gradle"
这个sample的依赖
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'android.arch.lifecycle:extensions:1.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
完成以上步骤,Run sample-sheep-app的时候就报错了
去掉sample-plugin-app的build.gradle添加的就可以安装了:
apply from: "../sample-sheep-app/build.gradle"
但还是打不开新加的插件,我再尝试尝试吧。 ps:插件apk已安装的情况下可以打开,未安装打不开。
如果只是sample代码,最好直接提交到你fork的库上,我就可以编译看看了。
如果只是sample代码,最好直接提交到你fork的库上,我就可以编译看看了。
提交了,git:9e5f1973a067810a8ca590f29b9fe68f0b535696
这回看明白你哪里搞错了。
sample-plugin-app
的build.gradle
中写的apply from: "../sample-normal-app/build.gradle"
,它的意思是把sample-normal-app
配置的内容先抄一遍。然后后面又把applicationId改了,再应用的Shadow插件。这样做才是让sample-plugin-app
成为一个和sample-normal-app
构建配置一样,但是多了编译成Shadow插件的模块。
你新建的sample-sheep-app
只是一个相当于sample-normal-app
的普通app。你可以把sample-plugin-app
中Shadow相关的配置抄过去,也可以类似的再建一个sample-sheep-plugin-app
模块。
你在sample-plugin-app
中添加apply from: "../sample-sheep-app/build.gradle"
,就相当于把你的sample-sheep-app
配置又一次复制到了sample-plugin-app
中,那出现重复类也不奇怪了啊。
尝试按照你说的去修改了,并添加了sheep-plugin模块。 执行了packageAllPlugin打包所有插件,然后push到/data/local/tmp,打开宿主,还是打不开sheep-plugin的MainActivity。 报了下面这个错误:
2019-07-04 13:41:05.703 13114-13151/com.tencent.shadow.sample.host E/com.tencent.shadow.dynamic.manager.PluginManagerThatUseDynamicLoader: getPlugin exception:
java.lang.NullPointerException: Attempt to read from field 'java.io.File com.tencent.shadow.core.manager.installplugin.InstalledPlugin$Part.pluginFile' on a null object reference
at com.tencent.shadow.dynamic.manager.PluginManagerThatUseDynamicLoader.getPlugin(PluginManagerThatUseDynamicLoader.java:274)
at com.tencent.shadow.dynamic.manager.UuidManagerBinder.onTransact(UuidManagerBinder.java:50)
at android.os.Binder.execTransact(Binder.java:731)
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:1127)
at com.tencent.shadow.dynamic.manager.BinderPluginLoader.loadPlugin(BinderPluginLoader.java:46)
at com.tencent.shadow.sample.manager.FastPluginManager.loadPlugin(FastPluginManager.java:141)
at com.tencent.shadow.sample.manager.FastPluginManager.convertActivityIntent(FastPluginManager.java:119)
at com.tencent.shadow.sample.manager.FastPluginManager.startPluginActivity(FastPluginManager.java:111)
at com.tencent.shadow.sample.manager.SamplePluginManager$1.run(SamplePluginManager.java:109)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
2019-07-04 13:41:05.705 13159-13172/com.tencent.shadow.sample.host:plugin E/JavaBinder: *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
com.tencent.shadow.dynamic.host.FailedException
at com.tencent.shadow.dynamic.host.BinderUuidManager.checkException(BinderUuidManager.java:36)
at com.tencent.shadow.dynamic.host.BinderUuidManager.getPlugin(BinderUuidManager.java:54)
at com.tencent.shadow.dynamic.loader.impl.DynamicPluginLoader.loadPlugin(DynamicPluginLoader.kt:80)
at com.tencent.shadow.dynamic.loader.impl.PluginLoaderBinder.onTransact(PluginLoaderBinder.kt:42)
at android.os.Binder.execTransact(Binder.java:731)
2019-07-04 13:41:05.709 13114-13151/com.tencent.shadow.sample.host E/AndroidRuntime: JUNK_FATAL_EXCEP: FATAL EXCEPTION: pool-3-thread-1,Process: com.tencent.shadow.sample.host, PID: 13114
2019-07-04 13:41:05.710 13114-13151/com.tencent.shadow.sample.host E/AndroidRuntime: FATAL EXCEPTION: pool-3-thread-1
Process: com.tencent.shadow.sample.host, PID: 13114
java.lang.RuntimeException: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.tencent.shadow.sample.host/com.sheepyang1993.shadowhostdemo.MainActivity}; have you declared this activity in your AndroidManifest.xml?
at com.tencent.shadow.sample.manager.SamplePluginManager$1.run(SamplePluginManager.java:111)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.tencent.shadow.sample.host/com.sheepyang1993.shadowhostdemo.MainActivity}; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2015)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1678)
at android.app.Activity.startActivityForResult(Activity.java:4617)
at android.app.Activity.startActivityForResult(Activity.java:4575)
at android.app.Activity.startActivity(Activity.java:4939)
at android.app.Activity.startActivity(Activity.java:4904)
at com.tencent.shadow.sample.manager.FastPluginManager.startPluginActivity(FastPluginManager.java:115)
at com.tencent.shadow.sample.manager.SamplePluginManager$1.run(SamplePluginManager.java:109)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
怎么关了。。。
给你改好了。
git fetch https://github.com/shifujun/Shadow.git f294415c
git merge FETCH_HEAD
这样把我的代码改动合到你本地看看吧。
你主要是对Android构建不太熟悉。具体改动原因我都写Commit Message里了。另外也不是说插件apk模块非得拆出来一个aar模块,只是拆出来方便同时再构建一个可以正常安装的app。但是你不能不拆这个模块,同时搞一个空的apk模块。
看你好像又改动了。就别merge了。
git fetch https://github.com/shifujun/Shadow.git f294415c
git checkout -b \#29 FETCH_HEAD
这样直接看我的分支的。
好的,我看下,感谢~:kissing_heart:
看你好像又改动了。就别merge了。
git fetch https://github.com/shifujun/Shadow.git f294415c git checkout -b \#29 FETCH_HEAD
这样直接看我的分支的。
可以了,构建这一块,我再去熟悉下。感谢大牛~