Tencent / tinker

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

补丁包生成失败 #1633

Closed kindyrain closed 2 years ago

kindyrain commented 2 years ago

生成补丁包失败,错误信息是补丁包新增了一个新的ABI的so,但是实际上基准包和新包都是有相同的so库的,一下是相关信息,在我本地的windows环境下补丁包是可以生成并且有效,出现问题是在jenkins上编译补丁包出问题,使用的都是相同的代码。

接入bugly tinker sdk进行

异常类型:补丁包生成失败

tinker版本:1.9.14.16 tinker suport:com.tencent.bugly:tinker-support:1.2.3 gradle版本:gradle:3.5.3

是否使用热更新SDK:Bugly SDK

系统:如:linux ubuntu

tinker support 配置 tinkerSupport { ignoreWarning = true // 开启tinker-support插件,默认值true enable = true // 指定归档目录,默认值当前module的子目录tinker autoBackupApkDir = "${bakPath}" //建议设置true,用户就不用再自己管理tinkerId的命名,插件会为每一次构建的base包自动生成唯一的tinkerId,默认命名规则是versionname.versioncode_时间戳 //具体参考https://github.com/BuglyDevTeam/Bugly-Android-Demo/wiki/Tinker-ID%E8%AF%A5%E6%80%8E%E4%B9%88%E8%AE%BE%E7%BD%AE autoGenerateTinkerId = true //tinkerId必须保证唯一性,如果两个base包的tinkerid是一样的,并且都联网激活了,那么后续补丁上传到后台的时候会出现匹配错误 tinkerId = getTinkerIdValue() println("tinkerId="+tinkerId) // 是否启用覆盖tinkerPatch配置功能,默认值false // 开启后tinkerPatch配置不生效,即无需添加tinkerPatch overrideTinkerPatchConfiguration = true

// 编译补丁包时,必需指定基线版本的apk,默认值为空
// 如果为空,则表示不是进行补丁包的编译
// @{link tinkerPatch.oldApk }
baseApk =  "${bakPath}/${baseApkDir}/"+getOldApk()

// 对应tinker插件applyMapping
baseApkProguardMapping = "${bakPath}/${baseApkDir}/pro-release-mapping.txt"

// 对应tinker插件applyResourceMapping
baseApkResourceMapping = "${bakPath}/${baseApkDir}/pro-release-R.txt"

// buildAllFlavorsDir = "${bakPath}/${baseApkDir}" // 是否开启加固模式,默认为false isProtectedApp = true

enableProxyApplication = false

supportHotplugComponent = true
libPattern  = ["lib/*/*.so"]

}

堆栈/日志:

Task app:tinkerPatchProRelease FAILED -----------------------Tinker patch begin----------------------- configuration: oldApk:/var/lib/jenkins/workspace/hotfix_release/bakApk/0215-21-41-37/pro/4.2.0.2_2022_02_15_21_41.apk newApk:/var/lib/jenkins/workspace/hotfix_release/app/build/outputs/apk/pro/release/4.2.0.2_2022_02_15_21_49.apk outputFolder:/var/lib/jenkins/workspace/hotfix_release/app/build/tmp/tinkerPatch isIgnoreWarning:true isAllowLoaderClassInAnyDex:false isRemoveLoaderForAllDex:false isProtectedApp:true 7-ZipPath:/root/.gradle/caches/modules-2/files-2.1/com.tencent.mm/SevenZip/1.1.10/187470343de55309b7a6c9bc2a9e69f84e38e701/SevenZip-1.1.10-linux-x86_64.exe useSignAPk:true package meta fields: dex configs: dexMode: jar dexPattern:assets/secondary-dex-..jar dexPattern:classes..dex dex loader:youqu.android.to.MyTinkerApp dex loader:com.tencent.tinker.loader. lib configs: libPattern:lib/./..so resource configs: resPattern:AndroidManifest.xml resPattern:assets/. resPattern:res/. resPattern:resources.arsc resPattern:r/. resIgnore change:assets/._meta.txt largeModSize:100kb useApplyResource:false ArkHot: arkHot / patch.apk

config: arkHot patch.apkassets/arkHot_meta.txt Analyze old and new apk files1: old apk1131: 4.2.0.2_2022_02_15_21_41.apk, size=45702329, md5=c824dc0ef085cadec76f7476babb94b4 new apk: 4.2.0.2_2022_02_15_21_49.apk, size=45702334, md5=8c39e68dffa693b6b0b2c2847d7f296d

Manifest was changed, while there's no any new components added. Make sure if such changes were all you expected.

UnZipping apk to /var/lib/jenkins/workspace/hotfix_release/app/build/tmp/tinkerPatch/4.2.0.2_2022_02_15_21_41 UnZipping apk to /var/lib/jenkins/workspace/hotfix_release/app/build/tmp/tinkerPatch/4.2.0.2_2022_02_15_21_49 Check for loader classes in dex: classes.dex Collect class descriptors in classes.dex Check for loader classes in dex: classes2.dex Collect class descriptors in classes2.dex

FAILURE: Build failed with an exception.

BUILD FAILED in 2m 14s 388 actionable tasks: 388 executed Build step 'Execute shell' marked build as failure New run name is '#32' Archiving artifacts Finished: FAILURE

kindyrain commented 2 years ago

原因找到了,是因為我們的jenkins安裝在var/lib/jenkins 路徑下,把jenkins作為一個新的ABI了

wyhusky commented 2 years ago

@kindyrain 你最后是怎么解决这个问题的?