Comments (2)
之前遇到过类似的问题,是因为检查的时候拿到的是apk内自带的TinkerTestDexLoad,不是补丁包内的。临时解决方法是打包的时候把TinkerTestDexLoad去掉。
from tinker.
问题原因是,合成的tinker_classN.apk中,用来检测patch 的 test.dex 放在最后,class load 的时候,就被前面的抢先了。
不知道为啥他们这么设计
我自己简单改了下。
---
Index: tinker-android/tinker-android-loader/src/main/java/com/tencent/tinker/loader/TinkerDexLoader.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/tinker-android/tinker-android-loader/src/main/java/com/tencent/tinker/loader/TinkerDexLoader.java b/tinker-android/tinker-android-loader/src/main/java/com/tencent/tinker/loader/TinkerDexLoader.java
--- a/tinker-android/tinker-android-loader/src/main/java/com/tencent/tinker/loader/TinkerDexLoader.java (revision a9c4b7aee1319bf4f4b524e2fe7d700ce1404382)
+++ b/tinker-android/tinker-android-loader/src/main/java/com/tencent/tinker/loader/TinkerDexLoader.java (date 1701688205021)
@@ -224,7 +224,7 @@
HashMap<String, String> dexes = new HashMap<>();
ShareDexDiffPatchInfo testInfo = null;
-
+ HashSet<ShareDexDiffPatchInfo> myClassNDexInfo = new HashSet<>();
for (ShareDexDiffPatchInfo info : allDexInfo) {
//for dalvik, ignore art support dex
if (isJustArtSupportDex(info)) {
@@ -238,7 +238,7 @@
if (isVmArt && info.rawName.startsWith(ShareConstants.TEST_DEX_NAME)) {
testInfo = info;
} else if (isVmArt && ShareConstants.CLASS_N_PATTERN.matcher(info.realName).matches()) {
- classNDexInfo.add(info);
+ myClassNDexInfo.add(info);
} else {
dexes.put(info.realName, getInfoMd5(info));
LOAD_DEX_LIST.add(info);
@@ -246,12 +246,15 @@
}
if (isVmArt
- && (testInfo != null || !classNDexInfo.isEmpty())) {
+ && (testInfo != null || !myClassNDexInfo.isEmpty())) {
if (testInfo != null) {
classNDexInfo.add(ShareTinkerInternals.changeTestDexToClassN(testInfo, classNDexInfo.size() + 1));
}
dexes.put(ShareConstants.CLASS_N_APK_NAME, "");
}
+ for (ShareDexDiffPatchInfo info : myClassNDexInfo) {
+ classNDexInfo.add(ShareTinkerInternals.changeDexToClassN(info, classNDexInfo.size() + 1));
+ }
//tinker/patch.info/patch-641e634c/dex
String dexDirectory = directory + "/" + DEX_PATH + "/";
Index: tinker-android/tinker-android-loader/src/main/java/com/tencent/tinker/loader/shareutil/ShareTinkerInternals.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/tinker-android/tinker-android-loader/src/main/java/com/tencent/tinker/loader/shareutil/ShareTinkerInternals.java b/tinker-android/tinker-android-loader/src/main/java/com/tencent/tinker/loader/shareutil/ShareTinkerInternals.java
--- a/tinker-android/tinker-android-loader/src/main/java/com/tencent/tinker/loader/shareutil/ShareTinkerInternals.java (revision a9c4b7aee1319bf4f4b524e2fe7d700ce1404382)
+++ b/tinker-android/tinker-android-loader/src/main/java/com/tencent/tinker/loader/shareutil/ShareTinkerInternals.java (date 1701688205037)
@@ -190,6 +190,17 @@
return null;
}
+ public static ShareDexDiffPatchInfo changeDexToClassN(ShareDexDiffPatchInfo rawDexInfo, int index){
+ String newName;
+ if (index != 1) {
+ newName = "classes" + index + ".dex";
+ } else {
+ newName = "classes.dex";
+ }
+ return new ShareDexDiffPatchInfo(newName, rawDexInfo.path, rawDexInfo.destMd5InDvm, rawDexInfo.destMd5InArt,
+ rawDexInfo.dexDiffMd5, rawDexInfo.oldDexCrC, rawDexInfo.newOrPatchedDexCrC, rawDexInfo.dexMode);
+ }
+
public static boolean isNullOrNil(final String object) {
if ((object == null) || (object.length() <= 0)) {
return true;
from tinker.
Related Issues (20)
- 和华为性能分析sdk同时集成出现冲突 HOT 2
- 项目加入sentry之后编译补丁包异常
- tinker的开源版本和内部使用版本是一个版本吗 HOT 1
- gradle 升级到4.2.2 编译错误 HOT 1
- patch 升级耗时太久!The patch upgrade takes too long ! HOT 1
- Android13-debug环境补丁加载正常,release加载成功,但重启app会连续崩溃3次并自动清理补丁 HOT 3
- 华为鸿蒙系统HarmonyOS 4.0.0版本补丁成功,版本号(BuildConfig.APP_VERSION)无变化 HOT 5
- 1.9.14.26 合成很慢
- tinkerPatch命令执行成功,但是没有生成补丁apk文件 HOT 2
- 补丁包生成失败,Method xxx in loader class xxx,refers to method xxx,which is not in loader class, this may cause crash when patch is loaded. HOT 1
- drawable下新增图片不使用newApk选项编译出来的补丁包无效,使用newApk有效 HOT 2
- Android 14 dex2oat不生效
- 1.9.14.18之后删除无用theme异常 & 启动崩溃
- 1.9.14.26.3在华为老款手机补丁合并异常
- 用tinker demo升minsdk=24打补丁包报错Unexpected magic: [100, 101, 120, 10, 48, 51, 57, 0]
- tinker patch exception java.lang.NoSuchMethodError: No direct method <init>(Ljava/lang/String;Ljava/lang/String;ZZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V in class HOT 2
- tinker patch meta entry not found HOT 1
- 补丁包安装成功,重启APP加载修复包耗时过长问题 HOT 2
- 小米应用市场 将在 今年7月份 认为 获取 应用安装路径(ApplicationInfo.sourceDir)是隐私违规的 HOT 2
- 【TargetSDK34适配】PathClassLoader跟DexClassLoader动态加载影响
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 tinker.