Tencent / tinker

Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstall apk.
Other
17.1k stars 3.33k forks source link

执行tinkerPatch过程中提示找不到CON.png(句柄无效) #1666

Open XJAlive opened 1 year ago

XJAlive commented 1 year ago

异常类型:执行tinkerPatchRelease过程中提示找不到CON.png(句柄无效)

手机型号:

手机系统版本:

tinker版本:v1.9.14.24

gradle版本:v7.2.0 apg:7.1.2

是否使用热更新SDK: TinkerPatch SDK 

系统:windows

堆栈/日志:

```gradle升级至7.2,正常执行tinkerPatchChannel_baiduRelease task,期间报错,提示找不到资源文件(CON.png)
原因:
 gradle4.2之后的版本默认打开资源混淆优化,资源名称可能被缩减为CON.png/AUX.xml,其中CON/AUX等为windows系统保留关键字,在做差分时无法从output文件夹下面复制到tinker的备份目录,报错信息如下

Caused by: java.lang.RuntimeException: java.io.FileNotFoundException: F:\Project\Application\12.0.0\Application\app\build\tmp\tinkerPatch\app-channel_baidu-release-old\res\CON.png (句柄无效。)
        at com.tencent.tinker.build.patch.Runner.goToError(Runner.java:101)
        at com.tencent.tinker.build.patch.Runner.tinkerPatch(Runner.java:81)
        at com.tencent.tinker.build.patch.Runner.run(Runner.java:53)
        at com.tencent.tinker.build.patch.Runner.gradleRun(Runner.java:46)
        at com.tencent.tinker.build.patch.Runner$gradleRun.call(Unknown Source)
        at com.tencent.tinker.build.gradle.task.TinkerPatchSchemaTask.tinkerPatch(TinkerPatchSchemaTask.groovy:160)
        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.StandardTaskAction.doExecute(StandardTaskAction.java:58)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:502)
        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$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:74)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:74)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:487)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:470)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:106)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:271)
        at 
jw007 commented 1 year ago

遇到同样的问题+1,debug包不混淆就没问题

srxffcc1 commented 1 year ago

gradle.properties android.enableResourceOptimizations=false

XJAlive commented 1 year ago

gradle.properties android.enableResourceOptimizations=false

”The option setting 'android.enableResourceOptimizations=false' is deprecated. The current default is 'true'. It will be removed in version 8.0 of the Android Gradle plugin.” 这个配置过时了

srxffcc1 commented 1 year ago

gradle.properties android.enableResourceOptimizations=false

”The option setting 'android.enableResourceOptimizations=false' is deprecated. The current default is 'true'. It will be removed in version 8.0 of the Android Gradle plugin.” 这个配置过时了

但是题主所用的版本是7的 我想这个目前对于题主是有帮助的 目前出现这个的原因就是资源被混淆了