Git Product home page Git Product logo

drouter's Issues

java.lang.IllegalStateException: FragmentManager is already executing transactions

错误堆栈:
2Thread Name: 'main'
3Back traces starts.
4java.lang.IllegalStateException: FragmentManager is already executing transactions
5 at androidx.fragment.app.FragmentManager.ensureExecReady(FragmentManager.java:1931)
6 at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1967)
7 at androidx.fragment.app.BackStackRecord.commitNow(BackStackRecord.java:305)
8 at com.didi.drouter.router.ActivityCompat2$HolderFragmentV4.attach(ActivityCompat2.java:121)
9 at com.didi.drouter.router.RouterDispatcher.startActivity(RouterDispatcher.java:62)
10 at com.didi.drouter.router.RouterLoader$1.onContinue(RouterLoader.java:95)
11 at com.didi.drouter.router.RouterDispatcher.start(RouterDispatcher.java:28)
12 at com.didi.drouter.router.ActivityCompat2.startActivityForResult(ActivityCompat2.java:58)
13 at com.didi.drouter.router.InterceptorHandler.handleNext(InterceptorHandler.java:30)
14 at com.didi.drouter.router.InterceptorHandler.handle(InterceptorHandler.java:21)
15 at com.didi.drouter.router.RouterLoader.start(RouterLoader.java:54)
16 at com.didi.drouter.router.RouterLoader.startLocal(RouterLoader.java:79)
17 at com.didi.drouter.router.Request.start(Request.java:58)

发生场景:
外层是viewPager,在其中的一个fragment中使用Drouter.start(),在调用这个方法的同时,切换viewPager。

定位到的源码:

public void attach(Activity activity) {
FragmentManager fragmentManager = ((FragmentActivity)activity).getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(this, TAG);
transaction.commitNow();
}

这里一定需要commitNow吗?
有什么方法可以避免这个问题的发生?

如何获取路由中携带的参数

DRouter.build("xxx://xxxx/xxxx")
      .putExtra("cid", "xxxx")
      .putExtra("type", "xxxx")
      .start()

然后在对应的activity里面

val request = RouterHelper.getRequest(this)
if(request != null) {
    type = request.getExtra().getInt("type")
}

request总是为null,无法取到路由请求里面携带的参数

如果要获取路由参数,需要自己封装方法从intent里面取吗?

编译时出现警告日志

【平台环境】:windows
【Android Studio版本】:Android Studio Chipmunk | 2021.2.1 Patch 1
【编译使用Java版本】:jdk11
【kotlin版本】:org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21
【gradle-plugin版本】:com.android.tools.build:gradle:7.1.3
【gradle-wrapper版本】:gradle-7.4-all.zip
【drouter版本】:drouter-api:2.3.1
【复现步骤】:编译时AGP出现上千条警告日志
【期望结果】:不出现警告日志
【日志】:AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow.","sources":[{"file":"C:\Users\troy\Repo\xxx\app\build\intermediates\transforms\DRouter\dev\debug\214.jar"}],"tool":"D8"}
b4c6a214201d072737cf92b7f2a193c
605908da0be83ccfd92cbe39fd070ff

关于drouter-plugin-proxy

为什么要做一个gradle plugin的proxy,然后里面也只是下载了真正的gradle plugin,然后去执行逻辑,是出于什么考虑,很好奇。

【重要】================提问题模板================

请按照以下模板创建新的issue,填写环境,方便快速定位问题

【平台环境】:mac/windows
【Android Studio版本】:Bumblebee | 2021.1.1 Patch 2
【编译使用Java版本】:jdk11,查看AS->设置->Build,Execution,Deployment->Build Tools->Gradle->Gradle JDK
【kotlin版本】:org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30
【gradle-plugin版本】:com.android.tools.build:gradle:4.2.2
【gradle-wrapper版本】:gradle-6.7.1-bin.zip
【drouter版本】:drouter-api:2.3.0
【复现步骤】:...
【期望结果】:...
【日志】:如方便最好也贴出来

运行报错

Cause: com/didi/drouter/plugin/RouterTransform has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

能支持App Bundle吗

8.1起,上架到GP的新应用,都要使用App Bundle的形式。
Arouter打出来的aab,由于动态路由的问题,跳转找不到path。
目前在想办法找解决方案。想问下滴滴的框架现在支持App Bundle吗

似乎无法扫描到打到aar里面的路由服务

项目里面分为接口模块interface和一个公共服务实现模块fn
本来是都是代码集成的,运行正常。

后面把模块都是打出aar(未传maven仓库),使用api files的方式依赖,正常编译过了后,运行发现找不到@Service的服务了。(因为测试,只写了一个服务)

对aar依赖大致类似下面的写法:

dependencies {

    api files('aar/interface-release.aar')
    api files('aar/fn-release.aar')

}

之后,先注释掉上面 fn的aar依赖后,把原fn的模块代码拷过来,并调整一下fn模块自己的依赖,将对interface模块代码的依赖,改成上面的interface的aar。
再编译,运行就是正常的了。

依赖Gradle插件后出现问题

不依赖插件直接编译不会出现问题,依赖后一直卡在app:dexBuilderDebug出现Unexpected scopes found in folder 'E:\MikumoDev\AndroidDev\Ostar\app\build\intermediates\transforms\DRouter\debug'. Required: EXTERNAL_LIBRARIES, SUB_PROJECTS. Found: EXTERNAL_LIBRARIES, PROJECT, SUB_PROJECTS

升级jdk11后 编译失败

关闭R8编译 android.enableR8=false
启用代码混淆 minifyEnabled true
jdk11(jdk8无问题)
示例Demo能复现该问题 windows系统

Execution failed for task ':demo:minifyDebugWithProguard'.

java.io.IOException: Can't read [C:\Users\troy\Repo\github\DRouter-master\demo\build\intermediates\transforms\DRouter\debug\44(;;;;;;;**.class)] (Can't read [com] (Can't read [didi] (Can't read [drouter] (Can't read [loader] (Can't read [host] (Can't read [InterceptorLoader.class] (Can't process class [com/didi/drouter/loader/host/InterceptorLoader.class] (Unsupported version number [55.0] (maximum 54.0, Java 10)))))))))

image

拦截器能否通过路由方式获得?

项目中多个模块业务分离,其他模块不太好使用硬代码将其他模块中拦截器引入,比如用户模块中有登录拦截器,其他模块中无法使用该拦截器class,可有更好的办法,现在可使用handler实现,可总觉得很怪。

SHA-256 digest error for org/bouncycastle/asn1/cmc/BodyPartReference.class

关键信息:
``
classpath 'com.android.tools.build:gradle:7.2.2'
//https://github.com/didi/DRouter/wiki
classpath "io.github.didi:drouter-plugin-proxy:1.0.2"
//https://mvnrepository.com/artifact/io.sentry/sentry-android-gradle-plugin 高版本3.x drouter会报错
classpath 'io.sentry:sentry-android-gradle-plugin:3.5.0'

//https://github.com/didi/DRouter/wiki
api "io.github.didi:drouter-api:2.4.3"
api "io.github.didi:drouter-api-page:1.0.0"
api "io.github.didi:drouter-api-process:1.0.0"

``

//这个版本可用
classpath 'io.sentry:sentry-android-gradle-plugin:2.1.5'

集成最新版的sentry时报以下错误:
//https://mvnrepository.com/artifact/io.sentry/sentry-android-gradle-plugin
// 高版本3.x drouter会报错
classpath 'io.sentry:sentry-android-gradle-plugin:3.5.0'

``
Caused by: java.lang.RuntimeException: org.gradle.api.GradleException: Could not generate d_router table
SHA-256 digest error for org/bouncycastle/asn1/cmc/BodyPartReference.class
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:71)
at com.android.build.gradle.internal.profile.AnalyticsResourceManager.recordBlockAtExecution(AnalyticsResourceManager.kt:226)
at com.android.build.gradle.internal.profile.AnalyticsService.recordBlock(AnalyticsService.kt:160)
at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:239)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskInputsTaskAction.doExecute(IncrementalTaskInputsTaskAction.java:47)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
at org.gradle.api.internal.project.taskfactory.AbstractIncrementalTaskAction.execute(AbstractIncrementalTaskAction.java:25)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:242)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:227)
at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:210)
at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:193)
at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:171)
at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:50)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:40)
at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:61)
at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:42)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:180)
at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)
at org.gradle.internal.Either$Right.fold(Either.java:175)
at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59)
at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)
at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)
at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:36)
at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:25)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:110)
at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:56)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:56)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:73)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:89)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:50)
at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:114)
at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:57)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:76)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:50)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNoEmptySources(SkipEmptyWorkStep.java:249)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:86)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:54)
at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:32)
at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:21)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:43)
at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:31)
at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:287)
at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:144)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:133)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:333)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:320)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:313)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:299)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:143)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:227)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:218)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:140)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
Caused by: org.gradle.api.GradleException: Could not generate d_router table
SHA-256 digest error for org/bouncycastle/asn1/cmc/BodyPartReference.class
at com.didi.drouter.plugin.RouterTask.startExecute(RouterTask.java:92)
at com.didi.drouter.plugin.RouterTask.run(RouterTask.java:71)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at com.didi.drouter.plugin.RouterTransform.transform(RouterTransform.groovy:81)
at com.didi.drouter.plugin.RouterTransform$transform.call(Unknown Source)
at com.didi.drouter.plugin.RouterTransform$transform.call(Unknown Source)
at com.didi.drouter.plugin.TransformProxy.transform(TransformProxy.groovy:69)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:281)
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:69)
... 123 more
Caused by: java.lang.SecurityException: SHA-256 digest error for org/bouncycastle/asn1/cmc/BodyPartReference.class
at javassist.bytecode.AttributeInfo.(AttributeInfo.java:72)
at javassist.bytecode.StackMapTable.(StackMapTable.java:54)
at javassist.bytecode.AttributeInfo.read(AttributeInfo.java:136)
at javassist.bytecode.CodeAttribute.(CodeAttribute.java:116)
at javassist.bytecode.AttributeInfo.read(AttributeInfo.java:87)
at javassist.bytecode.MethodInfo.read(MethodInfo.java:568)
at javassist.bytecode.MethodInfo.(MethodInfo.java:109)
at javassist.bytecode.ClassFile.read(ClassFile.java:817)
at javassist.bytecode.ClassFile.(ClassFile.java:185)
at javassist.CtClassType.(CtClassType.java:98)
at javassist.ClassPool.makeClass(ClassPool.java:707)
at javassist.ClassPool.makeClass(ClassPool.java:685)
at com.didi.drouter.plugin.RouterTask.resolveJarFile(RouterTask.java:200)
at com.didi.drouter.plugin.RouterTask.loadFullPath(RouterTask.java:162)
at com.didi.drouter.plugin.RouterTask.loadFullPaths(RouterTask.java:130)
at com.didi.drouter.plugin.RouterTask.startExecute(RouterTask.java:83)
... 133 more

``

拦截器相关

【平台环境】:windows
【Android Studio版本】:chipmunk| 2021.2.1 Patch 1
【编译使用Java版本】:jdk11
【kotlin版本】: 1.6.21
【gradle-plugin版本】:7.1.3
【gradle-wrapper版本】:7.1.3
【drouter版本】:2.3.0
【期望结果】:正常运行app

我的路由参数里面有一个needLogin参数,标志前往此路由需要用户进行登录。我现在想法时声明一个全局的登录拦截器,判断路由中的参数,在拦截器中进行跳转到登录,用户登录成功,继续之前的路由

`
@interceptor(
name = "LoginInterceptor",
priority = 1,
global = true
)

class LoginInterceptor : IRouterInterceptor {
companion object {
const val LOGIN_QUERY = "needLogin"
const val LOGIN_URl = "https://app.ink.net/login"
}

override fun handle(request: Request) {
    if (checkNeedLogin(request)) {
        request.setRedirect(LOGIN_URl)
            .start(request.context, object : RouterCallback.ActivityCallback() {
                override fun onActivityResult(resultCode: Int, data: Intent?) {
                    Log.d("ink", "back")
                }
            })
    } else {
        request.interceptor.onContinue()
    }
}

private fun checkNeedLogin(request: Request): Boolean {
    val needLogin = request.uri.getQueryParameter(LOGIN_QUERY)
    if (needLogin.isNullOrEmpty()) {
        return false
    }
    return needLogin.equals("true", false)
}

}

`
我希望在onActivityResult中获取到用户的登录结果,并根据结果决定是否进行进一步的跳转。但是现在我并不能拿到对应的结果,他甚至并没有执行onActivityResult 方法。

我并不想在拦截器中传值到登录页面,然后再在登录页面中做判断。我想请问一下我是否能直接在拦截器中做处理?

无法跳转(there is no request target match)

D/DRouterCore: Request start -------------------------------------------------------------
D/DRouterCore: primary request "1", router uri "didi://router/login?a=1&b=2", need callback "true"
W/DRouterCore: warning: there is no request target match
D/DRouterCore: primary request "1" complete, router uri "didi://router/login?a=1&b=2", all reason {}
D/0PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
D/8PRETTY_LOGGER: │ false
D/0PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
D/DRouterCore: Request finish ------------------------------------------------------------

LoginActivity

@AndroidEntryPoint
@Router(scheme = "didi", host = "router", path = "/login")
class LoginActivity : BaseActivity<ActivityLoginBinding>()

跳转的代码

DRouter.build("didi://router/login?a=1&b=2")
                    .start(context) { result ->
                        val r = result.isActivityStarted
                        Logger.d(r)
                    }

build.gradle

buildscript {
    repositories {
        // other repositories...
        mavenCentral()
        google()
        jcenter()
    }
    dependencies {
        // other plugins...
        classpath(Deps.Jetpack.Hilt.hiltPlugin)
        classpath "io.github.didi:drouter-plugin-proxy:1.0.2"
    }
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id 'com.android.application' version '7.1.1' apply false
    id 'com.android.library' version '7.1.1' apply false
    id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
    id 'org.jetbrains.kotlin.plugin.serialization' version '1.6.10' apply false
    id 'org.jetbrains.kotlin.jvm' version '1.6.10' apply false
}


task clean(type: Delete) {
    delete rootProject.buildDir
}

最新版 2.2.1 经常出现 所有路由无法跳转

最新版 2.2.1 经常出现 所有路由无法跳转 rebuild 后 重新运行有时候可以解决
primary request "76", router uri "/mine/wallet", need callback "false"
W/DRouterCore: warning: there is no request target match
D/DRouterCore: primary request "76" complete, router uri "/mine/wallet", all reason {}
D/DRouterCore: Request finish

path格式问题

如果一个path中带有查询参数,应该怎么定义呢?比如:/xxx/<id>/xxx?a=<a>&b=<b>,但是这样编译报错

编译没报错,运行报java.lang.IllegalArgumentException

跑drouter的demo没问题,跑公司的项目,同事的可以运行,我的运行不了,报错,有可能是什么问题

`java.lang.IllegalArgumentException: java.lang.IllegalArgumentException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:600)
at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:678)
at java.base/java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:722)
at com.android.ide.common.internal.WaitableExecutor.waitForTasksWithQuickFail(WaitableExecutor.java:149)
at com.android.build.gradle.internal.transforms.DesugarIncrementalTransformHelper.getInitalGraphData(DesugarIncrementalTransformHelper.java:162)
at com.android.build.gradle.internal.transforms.DesugarIncrementalTransformHelper.makeDesugaringGraph(DesugarIncrementalTransformHelper.java:130)
at com.google.common.base.Suppliers$NonSerializableMemoizingSupplier.get(Suppliers.java:167)
at com.android.build.gradle.internal.transforms.DesugarIncrementalTransformHelper.getDependenciesPaths(DesugarIncrementalTransformHelper.java:231)
at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.getD8DesugaringCacheInfo(DexArchiveBuilderTransform.java:467)
at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.transform(DexArchiveBuilderTransform.java:390)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:47)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:41)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:284)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:273)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:258)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:67)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:145)
at org.gradle.internal.execution.impl.steps.ExecuteStep.execute(ExecuteStep.java:49)
at org.gradle.internal.execution.impl.steps.CancelExecutionStep.execute(CancelExecutionStep.java:34)
at org.gradle.internal.execution.impl.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:69)
at org.gradle.internal.execution.impl.steps.TimeoutStep.execute(TimeoutStep.java:49)
at org.gradle.internal.execution.impl.steps.CatchExceptionStep.execute(CatchExceptionStep.java:33)
at org.gradle.internal.execution.impl.steps.CreateOutputsStep.execute(CreateOutputsStep.java:50)
at org.gradle.internal.execution.impl.steps.SnapshotOutputStep.execute(SnapshotOutputStep.java:43)
at org.gradle.internal.execution.impl.steps.SnapshotOutputStep.execute(SnapshotOutputStep.java:29)
at org.gradle.internal.execution.impl.steps.CacheStep.executeWithoutCache(CacheStep.java:134)
at org.gradle.internal.execution.impl.steps.CacheStep.lambda$execute$3(CacheStep.java:83)
at java.base/java.util.Optional.orElseGet(Optional.java:369)
at org.gradle.internal.execution.impl.steps.CacheStep.execute(CacheStep.java:82)
at org.gradle.internal.execution.impl.steps.CacheStep.execute(CacheStep.java:36)
at org.gradle.internal.execution.impl.steps.PrepareCachingStep.execute(PrepareCachingStep.java:33)
at org.gradle.internal.execution.impl.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:38)
at org.gradle.internal.execution.impl.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:23)
at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
at java.base/java.util.Optional.map(Optional.java:265)
at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:52)
at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:34)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:119)
at org.gradle.api.internal.tasks.execution.ResolvePreviousStateExecuter.execute(ResolvePreviousStateExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:93)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:45)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:94)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:56)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:67)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:49)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:315)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:305)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:101)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:49)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.base/java.lang.Thread.run(Thread.java:834)

Caused by: java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.(ClassReader.java:160)
at org.objectweb.asm.ClassReader.(ClassReader.java:143)
at org.objectweb.asm.ClassReader.(ClassReader.java:418)
at com.android.builder.desugaring.DesugaringClassAnalyzer.analyze(DesugaringClassAnalyzer.java:152)
at com.android.builder.desugaring.DesugaringClassAnalyzer.analyzeClass(DesugaringClassAnalyzer.java:139)
at com.android.builder.desugaring.DesugaringClassAnalyzer.access$000(DesugaringClassAnalyzer.java:60)
at com.android.builder.desugaring.DesugaringClassAnalyzer$1.visitFile(DesugaringClassAnalyzer.java:121)
at com.android.builder.desugaring.DesugaringClassAnalyzer$1.visitFile(DesugaringClassAnalyzer.java:115)
at java.base/java.nio.file.Files.walkFileTree(Files.java:2800)
at java.base/java.nio.file.Files.walkFileTree(Files.java:2872)
at com.android.builder.desugaring.DesugaringClassAnalyzer.analyzeDir(DesugaringClassAnalyzer.java:113)
at com.android.builder.desugaring.DesugaringClassAnalyzer.analyze(DesugaringClassAnalyzer.java:65)
at com.android.build.gradle.internal.transforms.DesugarIncrementalTransformHelper.lambda$getInitalGraphData$4(DesugarIncrementalTransformHelper.java:150)
at java.base/java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1448)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
Caused by: java.lang.IllegalArgumentException

Task :app:transformClassesWithDexBuilderForDevDebug FAILED
Execution failed for task ':app:transformClassesWithDexBuilderForDevDebug'.
com.android.build.api.transform.TransformException: java.lang.IllegalArgumentException: java.lang.IllegalArgumentException

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.`

Google Play新上架提交aab文件,无法跳转

我们的项目使用了DRouter,并且版本依赖已升级至2.1.3,编译生成出来的aab文件,安装到手机上,无法正常跳转。报 warning: there is no request target match
编译出来的apk能正常使用~
请问是否有解决办法,往告知,谢谢。

Gradle编译报错,是必须升级到java 11吗?

Gradle编译报错,是必须升级到java 11吗?

【平台环境】:mac
【Android Studio版本】:Chipmunk | 2021.2.1 Patch 1
【编译使用Java版本】:jdk8
【kotlin版本】:org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.0
【gradle-plugin版本】:com.android.tools.build:gradle:3.4.3
【gradle-wrapper版本】:gradle-5.6.4-all.zip
【drouter版本】:drouter-api:2.4.2
【复现步骤】:接入DRouter运行编译
【期望结果】:运行ok
【日志】:
FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:transformClassesAndResourcesWithDRouterForArm64Debug'.

com/didi/drouter/plugin/RouterTransform has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

  • Try:
    Run with --debug option to get more log output. Run with --scan to get full insights.

  • Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesAndResourcesWithDRouterForArm64Debug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:166)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:163)
    at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:191)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:156)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:108)
    at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionOutputsTaskExecuter.execute(ResolveBeforeExecutionOutputsTaskExecuter.java:67)
    at org.gradle.api.internal.tasks.execution.ResolveAfterPreviousExecutionStateTaskExecuter.execute(ResolveAfterPreviousExecutionStateTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:94)
    at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
    at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    Caused by: java.lang.UnsupportedClassVersionError: com/didi/drouter/plugin/RouterTransform has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
    at java_lang_ClassLoader$loadClass$0.call(Unknown Source)
    at com.didi.drouter.plugin.TransformProxy.transform(TransformProxy.groovy:64)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
    at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:103)
    at org.gradle.api.internal.project.taskfactory.IncrementalTaskInputsTaskAction.doExecute(IncrementalTaskInputsTaskAction.java:47)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:42)
    at org.gradle.api.internal.project.taskfactory.AbstractIncrementalTaskAction.execute(AbstractIncrementalTaskAction.java:25)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$5.run(ExecuteActionsTaskExecuter.java:476)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:461)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:444)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:93)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:237)
    at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$0(ExecuteStep.java:32)
    at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:32)
    at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
    at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:58)
    at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:35)
    at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
    at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:33)
    at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:39)
    at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
    at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
    at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:35)
    at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
    at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:45)
    at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:31)
    at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:208)
    at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:70)
    at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:45)
    at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
    at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:43)
    at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:32)
    at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
    at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
    at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
    at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
    at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:54)
    at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
    at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:76)
    at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
    at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
    at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
    at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:90)
    at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:48)
    at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:69)
    at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:47)
    at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:140)
    ... 34 more

  • Get more help at https://help.gradle.org

BUILD FAILED in 28s
632 actionable tasks: 1 executed, 631 up-to-date

支持VirtualApk?

支持VirtualApk?VirtualApk在 Android10,11用不了了吧,看了项目已经很久没更新了,你们didi内部还在使用这个插件化框架么?

[FEATURE REQUEST]全局设置scheme和host参数

通常一个app中scheme和host是全局一致的,目前似乎每个目标页面都需要完整设置这些参数,会有大量模版化的代码产生

@Router(scheme = SCHEME, host = HOST, path = PATH)

跳转函数也是如此

DRouter.build("$SCHEME://$HOST$PATH").start()

建议在DRouter初始化时,增加一个全局Config机制,当没有设置scheme、host时,默认使用全局scheme、host。

参考Retrofit的baseUrl

run 的时候偶现报错

【平台环境】:windows
【Android Studio版本】:chipmunk| 2021.2.1 Patch 1
【编译使用Java版本】:jdk11
【kotlin版本】: id 'org.jetbrains.kotlin.android' version '1.7.0-RC2' apply false
【gradle-plugin版本】:https://services.gradle.org/distributions/gradle-7.3.3-bin.zip
【gradle-wrapper版本】:gradle-7.3.3-bin.zip
【drouter版本】:drouter-api:2.2.1
【复现步骤】:run 的时候会偶现
【期望结果】:正常运行app
【日志】:
051a26b7612759c9921df74bda4f11d

Could not generate d_router table

【平台环境】:mac
【Android Studio版本】:Chipmunk | 2021.2.1 Patch 2
【编译使用Java版本】:jdk8
【kotlin版本】:org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.0
【gradle-plugin版本】:com.android.tools.build:gradle:3.4.3
【gradle-wrapper版本】:gradle-5.6.4-all.zip
【drouter版本】:drouter-api:2.3.1
【drouter插件版本】drouter-plugin:1.3.1
【复现步骤】:接入DRouter运行编译
【期望结果】:运行ok
【日志】:

  • Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesAndResourcesWithDRouterForDebug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:166)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:163)
    at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:191)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:156)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:108)
    at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionOutputsTaskExecuter.execute(ResolveBeforeExecutionOutputsTaskExecuter.java:67)
    at org.gradle.api.internal.tasks.execution.ResolveAfterPreviousExecutionStateTaskExecuter.execute(ResolveAfterPreviousExecutionStateTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:94)
    at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
    at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    Caused by: org.gradle.api.GradleException: Could not generate d_router table
    Class: === com.xxx.xxx.xxx ===
    Cause: javassist.NotFoundException: broken jar file?: com.xxx.xxx.xxx
    at com.didi.drouter.plugin.RouterTask.startExecute(RouterTask.java:92)
    at com.didi.drouter.plugin.RouterTask.run(RouterTask.java:71)
    at com.didi.drouter.plugin.RouterTransform.transform(RouterTransform.groovy:81)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
    at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:103)
    at org.gradle.api.internal.project.taskfactory.IncrementalTaskInputsTaskAction.doExecute(IncrementalTaskInputsTaskAction.java:47)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:42)
    at org.gradle.api.internal.project.taskfactory.AbstractIncrementalTaskAction.execute(AbstractIncrementalTaskAction.java:25)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$5.run(ExecuteActionsTaskExecuter.java:476)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:461)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:444)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:93)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:237)
    at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$0(ExecuteStep.java:32)
    at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:32)
    at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
    at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:58)
    at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:35)
    at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
    at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:33)
    at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:39)
    at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
    at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
    at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:35)
    at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
    at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:45)
    at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:31)
    at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:208)
    at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:70)
    at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:45)
    at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
    at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:43)
    at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:32)
    at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
    at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
    at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
    at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
    at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:54)
    at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
    at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:76)
    at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
    at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
    at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
    at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:90)
    at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:48)
    at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:69)
    at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:47)
    at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:140)
    ... 34 more
    Caused by: java.lang.Exception: Class: === com.xxx.xxx.xxx ===
    Cause: javassist.NotFoundException: broken jar file?: com.xxx.xxx.xxx
    at com.didi.drouter.generator.RouterCollect.generate(RouterCollect.java:240)
    at com.didi.drouter.generator.ClassClassify.generatorRouter(ClassClassify.java:41)
    at com.didi.drouter.plugin.RouterTask.startExecute(RouterTask.java:87)
    ... 93 more
    Caused by: java.lang.RuntimeException: javassist.NotFoundException: broken jar file?: com.xxx.xxx.xxx
    at javassist.CtClassType.getClassFile3(CtClassType.java:231)
    at javassist.CtClassType.getClassFile2(CtClassType.java:178)
    at javassist.CtClassType.getInterfaces(CtClassType.java:843)
    at com.didi.drouter.generator.AbsRouterCollect.checkInterface(AbsRouterCollect.java:188)
    at com.didi.drouter.generator.AbsRouterCollect.checkSuper(AbsRouterCollect.java:168)
    at com.didi.drouter.generator.RouterCollect.generate(RouterCollect.java:84)
    ... 95 more
    Caused by: javassist.NotFoundException: broken jar file?: com.xxx.xxx.xxx
    at javassist.JarClassPath.openClassfile(ClassPoolTail.java:171)
    at javassist.ClassPoolTail.openClassfile(ClassPoolTail.java:340)
    at javassist.ClassPool.openClassfile(ClassPool.java:621)
    at javassist.CtClassType.getClassFile3(CtClassType.java:217)
    ... 100 more

功能增强

  1. 建议Router类新增备注字段,主要用于备注信息,方便非开发人员理解,无实际逻辑应用。
  2. 能否可以自动生成路由文档?有这方面的需求。

统一处理页面跳转失败;拦截器中断路由后重新启动一个路由

这两种场景下的逻辑处理帮忙看看有没有什么问题或更好的封装。

统一处理页面跳转失败逻辑:

private fun start(uri: String, extras: Map<String, Any>? = null, intent: Intent? = null, context: Context? = null, callback: RouterCallback? = null) {
        DRouter.build(uri)
            .putExtraMap(extras)
            .putExtra(Extend.START_ACTIVITY_VIA_INTENT, intent)
            .start(context, object : RouterCallback.ActivityCallback() {
                override fun onResult(result: Result) {
                    if (result.request.routerType == RouterType.UNDEFINED || result.request.routerType == RouterType.ACTIVITY) {
                        if (!result.isActivityStarted) {
                            // LogUtils.d(TAG, "RouteHelper startLocalRoute 打开了错误的地址 uri = ${result.request.uri}, type = ${result.request.routerType}")
                            // 统一处理页面打开失败逻辑。。。
                            return
                        }
                    }
                    callback?.onResult(result)
                }

                override fun onActivityResult(resultCode: Int, data: Intent?) {
                    (callback as? RouterCallback.ActivityCallback)?.onActivityResult(resultCode, data)
                }
            })
    }

拦截器中断路由后打开另一个页面:

@Interceptor(name = "RouteInterceptor", priority = 999, global = true)
class RouteInterceptor : IRouterInterceptor {
    override fun handle(request: Request) {
        if (request.routerType == RouterType.ACTIVITY) {// 判断路由类型
            if (request.uri.toString().contains(RouteConstant.ROUTE_OPTION)) {// 判断是否是需要前置条件的uri
                if (SPUtils.getInstance().getBoolean("optionFlag")) {// 模拟前置条件
                    request.interceptor.onContinue()
                } else {
                    RouteHelper.startLocalRoute(RouteConstant.ROUTE_TEST)// 重新打开一个页面
                }
            } else {
                request.interceptor.onContinue()
            }
        } else {
            request.interceptor.onContinue()
        }

//        if (request.uri.toString() == RouteConstant.ROUTE_TEST) {
//            request.interceptor.onContinue()
//        } else {
//            request.interceptor.onInterrupt()
//        }
    }
}

请问使用共享元素动画做转场动画,怎么跳转

val bundle =
ActivityOptionsCompat.makeSceneTransitionAnimation(mContext,
Pair(view.findViewById(R.id.ivCover), "ivCover")).toBundle()
val intent = Intent(mContext, CourseDetailsActivity::class.java)
intent.putExtra("cover", item.cover)
intent.putExtra("title", item.name)
startActivity(intent, bundle)

AGP-7.1.1 打包AAR找不到plugin version

【平台环境】:mac
【Android Studio版本】:Android Studio Bumblebee | 2021.1.1 Patch 3
【编译使用Java版本】:jdk11
【kotlin版本】:org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.0
【gradle-plugin版本】:com.android.tools.build:gradle:7.1.1
【gradle-wrapper版本】:gradle-7.3.2-bin.zip
【drouter版本】:drouter-api:2.3.1
【复现步骤】:使用publish打包aar后上传到maven,主工程依赖aar,正常打包出apk,编译提示 Error: there is no drouter-plugin version,未扫描类文件,没有产生路由表
【期望结果】:正常的log,正常的生成路由表,正常的进行路由跳转
【日志】:> Task :app:transformClassesAndResourcesWithDRouterForDebug
plugin proxy version: 1.0.2
Error: there is no drouter-plugin version

4.2.2满足需求,.gradle/droute成功的download到plugin了
7.1.1没有下载插件文件,TransformProxy中的pluginVersion为空,猜测可能是ProxyUtil.getPluginVersion方法无法解析jar文件中的META-INF/drouter

发现一个小问题

从FragmentA跳入ActivityB,在ActivityB中setResult后,FragmentA中会有回调。
从FragmentA跳入ActivityB,再从ActivityB跳转(start(Context context, RouterCallback callback))到ActivityC,销毁ActivityC后,在ActivityB中setResult,FragmentA中无法收到回调。如果ActivityB跳转ActivityC时使用的是start(),FragmentA中会有回调。

DRouter的onActiviytResult不回调

最新版本

DRouter.build("didi://router/login")
.putExtra(key, value)
.start(this, new RouterCallback.ActivityCallback() {
@OverRide
public void onActivityResult(int resultCode, Intent data) {
}
});

使用以上方式的同时也复写了原生Activity的onActivityResult,但是复写的回调了,而DRouter的没有回调,是不能同时共存么?

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.