Comments (7)
AccessibilityService我没去看代码,可能是SDK内置的吧?像IntentService一样是SDK内置的话,我们在transform时是无法修改它的。所以要将它的子类在transform时特殊处理。
如果是这种情况,你可以参考IntentService的transform代码处理。
from shadow.
我试一下在transform那里改改看行不行,这个是android sdk里面的服务,我试了调起另外一个extends Service的服务是可以调用的。另外前面我提的另一个问题 #1226 能帮忙看看吗?或者rtx找我:marrkzhong,我给你开个工程权限看看,谢谢
from shadow.
class AccessibilityServiceTransform : SimpleRenameTransform(
mapOf("android.accessibilityservice.AccessibilityService" to "com.tencent.shadow.core.runtime.ShadowAccessibilityService")
)
override val mTransformList: List<SpecificTransform> = listOf(
ApplicationTransform(),
ActivityTransform(),
ServiceTransform(),
IntentServiceTransform(),
AccessibilityServiceTransform(),
InstrumentationTransform(),
FragmentSupportTransform(),
ShadowAccessibilityService实现照搬系统的AccessibilityService,并去掉androidX的注解
重新打sdk之后宿主manager插件都重新构建,加载插件会报错:
java.lang.RuntimeException: java.lang.IllegalStateException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.ClassCastException: Cannot cast androidx.core.app.CoreComponentFactory to com.tencent.shadow.core.runtime.ShadowAppComponentFactory
at com.tencent.shadow.sample.manager.SamplePluginManager$1.run(SamplePluginManager.java:110)
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:930)
Caused by: java.lang.IllegalStateException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.ClassCastException: Cannot cast androidx.core.app.CoreComponentFactory to com.tencent.shadow.core.runtime.ShadowAppComponentFactory
at android.os.Parcel.createExceptionOrNull(Parcel.java:2451)
at android.os.Parcel.createException(Parcel.java:2427)
at android.os.Parcel.readException(Parcel.java:2410)
at android.os.Parcel.readException(Parcel.java:2352)
at com.tencent.shadow.dynamic.manager.BinderPluginLoader.loadPlugin(BinderPluginLoader.java:50)
at com.tencent.shadow.sample.manager.FastPluginManager.loadPlugin(FastPluginManager.java:127)
at com.tencent.shadow.sample.manager.FastPluginManager.convertActivityIntent(FastPluginManager.java:110)
at com.tencent.shadow.sample.manager.FastPluginManager.startPluginActivity(FastPluginManager.java:102)
at com.tencent.shadow.sample.manager.SamplePluginManager$1.run(SamplePluginManager.java:108)
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:930)
from shadow.
上面这个问题原来是因为更改了插件的runtime的gradle文件里面的compileSdkVersion和minSdkVersion导致的,看来runtime里面的配置要跟plugin一样的话还得改其他东西
from shadow.
我发现有个问题,这AccessibilityService源码里面用到一些系统接口,在sdk里面没有这些系统接口,会导致编译报错说找不到方法,这样子是只能把这个服务放在宿主里面了?如果插件也要能单独运行的话,插件是也要放一份?
from shadow.
尽量在shadow的runtime层复制一份AccessibilityService的实现,让插件继承的父类改为shadow中的实现。像IntentService那样。
如果复制实现遇到有些接口根本调用不了,简单复制不可行。就得考虑更复杂转调那些自己实现不了的接口。可能是转调给一个真正的AccessibilityService。具体要看是什么功能。
from shadow.
谢谢,最终考虑还是在宿主做个继承AccessibilityService的服务来直接让系统触发,然后再把它里面回调的接口内容同步出去给插件接收处理。这样子你觉得ok不?这个无障碍服务主要是用来做辅助点击的。下午我试过在sdk的runtime里面去实现复制的服务,但是无奈它源码用到的一些系统的类在sdk里面都无法调用,都搬过来的话工作量比较大而且也不知道跑起来有没有问题。
from shadow.
Related Issues (20)
- 执行sample-app报错,要怎么解决? HOT 2
- 插件内可以调用qq分享吗?
- androidx.profileinstaller.ProfileVerifier安全校验失败? HOT 1
- 请问 normalImplementation 是只有Shadow才有的吗? HOT 2
- 宿主启动多插件 HOT 1
- Caused by: java.lang.ClassCastException: androidx.appcompat.widget.ContentFrameLayout cannot be cast to androidx.appcompat.widget.ContentFrameLayout HOT 2
- java.lang.VerifyError: Rejecting class com.demo.pluginmanager.UpPluginManager that attempts to sub-type erroneous class com.demo.pluginmanager.FastPluginManager (declaration of 'com.demo.pluginmanager.UpPluginManager' appears in /data/user/0/com.demo/files/upshadowmanager-release-1.3.4.2023070701.apk) HOT 3
- Caused by: java.lang.UnsupportedOperationException: Can't convert to color state list: type=0x1 at android.content.res.Resources.loadColorStateListForCookie(Resources.java:2718) at android.content.res.Resources.loadColorStateList(Resources.java:2699) at android.content.res.TypedArray.getColorStateList(TypedArray.java:485) at android.widget.TextView.<init>(TextView.java:746) at android.widget.TextView.<init>(TextView.java:671) at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:102) at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:97)
- shadow经过线上上亿用户的检验,想咨询下
- 希望添加 jni 调用的演示示例 HOT 2
- sample-host release模式多项测试失败 HOT 2
- 卸载插件时遇到无法删除文件的问题 HOT 2
- none-dynamic场景使用so HOT 4
- 启动插件时,会报上下文NullPointerException HOT 2
- 报错,找不到DelegateProvider
- 宿主更新插件,要重启宿主后插件才生效 HOT 1
- 怎么加载本地存储中的插件,而不是加载assets中的插件 HOT 1
- UnsatisfiedLinkError,so文件映射失败
- 关于插件和宿主通信的问题
- android 4.4.2 MultiDex 每次运行都要删除旧的dex
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from shadow.