Android 12 应用适配指南4 迁移指南
迁移指南
每次发布新的 Android 版本时,都会推出一些全新的功能并引入一些行为变更,目的就在于提高 Android 的实用性、安全性和性能。在许多情况下,您的应用都可以直接使用并完全按预期运行;而在其他的一些情况下,您可能需要对应用进行更新以适应这些平台变更。为了确保您的用户在Android 12上获得良好体验,请按照如下方法,将您的应用迁移到Android 12。
常见的迁移包含两个阶段,这两个阶段可以同时进行:
- 确保应用兼容性(在 Android 12 最终发布前)
- 针对新平台的功能和 API 调整应用(最终发布后尽快进行)
5.1 确保应用与Android 12兼容
您通常可以调整应用并发布更新,而无需更改应用的 targetSdkVersion。您必须测试现有应用在 Android 12 上的运行情况,以确保更新到最新版 Android 的用户获得良好的体验。有些平台变更可能会影响应用的行为方式,在开始测试之前,请仔细阅读“应用变更:所有应用”章节的内容,即使您不更改应用的targetSdkVersion,这些变更也可能会影响您的应用。
请务必查看并测试非 SDK 接口限制,您应使用应用公共 SDK 或 NDK 等效项替换应用使用的任何受限接口。留意突出显示这些访问权限的 logcat 警告,并使用 StrictMode 方法 detectNonSdkApiUsage() 以编程方式捕获它们。
最后,请务必完整测试应用中的库和 SDK,确保它们在 Android 12 上按预期运行,并遵循隐私权、性能、用户体验、数据处理和权限方面的最佳做法。如果您遇到问题,请尝试更新到最新版本的 SDK,或联系 SDK 开发者寻求帮助。
当您完成测试并进行更新后,建议您立即发布兼容的应用,尽早帮助用户顺利过渡网页转应用到 Android 12。
5.2 更新应用的targetSdkVerison并使用新API构建
当您计划全面支持 Android 12 时,请查看“以Android 12为目标平台的应用行为变更”,这些变更可能会影响应用的功能,可能需要进行大量开发工作,建议您尽早了解并解决这类问题。以下是全面支持Android 12的步骤:
编译应用并将其安装到搭载 Android 12 的设备上后,请开始测试,以确保应用能够在 Android 12 上正常运行,将测试重点放在以 Android 12 为目标平台的应用的行为变更上。
请务必查看并测试可能适用的受限非 SDK 接口的使用。留意突出显示这些访问权限的 logcat 警告,并使用 StrictMode 方法 detectNonSdkApiUsage() 以编程方式捕获它们。
最后,请务必完整测试应用中的库和 SDK,确保它们在 Android 12 上按预期运行,并遵循隐私权、性能、用户体验、数据处理和权限方面的最佳做法。如果您遇到问题,请尝试更新到最新版本的 SDK,或联系 SDK 开发者寻求帮助。
Android 12 为开发者引入了一项新功能:兼容性框架,可让您更轻松地测试应用的针对性行为变更。对于可调试的应用,切换开关可让您:
- 在不实际更改应用的 targetSdkVersion 的情况下测试有针对性的更改。您可以使用切换开关强制启用特定的针对性行为变更,以评估对现有应用的影响。
- 仅针对特定变更进行测试。您可以使用切换开关停用除要测试的变更之外的所有针对性变更,而不必一次处理所有针对性变更。
- 通过 adb 管理切换开关。您可以使用 adb 命令在自动测试环境中启用和停用可切换的变更。
- 使用标准变更 ID 更快地进行调试。每个可切换的变更都具有唯一 ID 和名称,可用于在日志输出中快速调试根本原因。
兼容性框架的详细内容,请参考:兼容性框架变更 (Android 12)。
6.重点适配问题
为了解当前应用对Android 12 版本的适配情况,以便更好推进MIUI Android 12适配工作,我们已在内部进行了自动化兼容性测试。我们选取了小米应用商店Top的各类应用,对每个应用进行下载、安装、启动、monkey测试、遍历测试、卸载,并在整个过程中检测是否有FC/ANR问题发生。根据测试结果,我们强烈建议您关注以下问题。若您的应用存在以下情况,请尽快适配。
6.1 使用了第三方加固工具
由于加固工具和系统耦合紧密,因此若您的应用使用了第三方加固工具,请尽快更新您所使用的加固工具以适配Android 12。我们也会尽快推动加固厂商适配Android 12。
在我们的测试中,存在兼容性问题的第三方加固工具有:
- 爱加密加固
- 样例问题trace1
05-24 14:38:02.242 10186 21122 21122 E AndroidRuntime: FATAL EXCEPTION: main
05-24 14:38:02.242 10186 21122 21122 E AndroidRuntime: Process: xxx, PID: xxx
05-24 14:38:02.242 10186 21122 21122 E AndroidRuntime: java.lang.VerifyError: Rejecting class xxx that attempts to sub-type erroneous class xxx (declaration of xxx appears in /data/user/0/xxx/Anonymous-DexFile@xxx.jar)
......
- 样例问题trace2
04-28 15:39:04.470 10238 24709 24709 E AndroidRuntime: FATAL EXCEPTION: main
04-28 15:39:04.470 10238 24709 24709 E AndroidRuntime: Process: xxx, PID: xxx
......
04-28 15:39:04.470 10238 24709 24709 E AndroidRuntime: at android.app.FragmentController.attachHost(FragmentController.java:89)
......
2.梆梆加固
- 样例问题trace1
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'Redmi/alioth/alioth:11/RKQ1.200826.002/20.12.28:user/release-keys'
Revision: '0'
ABI: 'arm'
Timestamp: 2021-01-04 09:19:50+0800
pid: 24985, tid: 25000, name: xxx >>> xxx <<<
uid: 10296
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xc050ffdc
r0 00006199 r1 00000000 r2 0000000a r3 00000000
......
backtrace:
......
#06 pc 00037201 /data/app/~~Sog5FGGDSipk_Lf4DCNCLw==/xxx-Gc_aKgh9uIp2F1djVkczxg==/lib/arm/libDexHelper.so (BuildId: 73f2fb76430d4168663cb4ade4cb836abf0fe502)
#07 pc 00037e83 /data/app/~~Sog5FGGDSipk_Lf4DCNCLw==/xxx-Gc_aKgh9uIp2F1djVkczxg==/lib/arm/libDexHelper.so (BuildId: 73f2fb76430d4168663cb4ade4cb836abf0fe502)
......
- 样例问题trace2
01-14 18:01:11.350 10686 31177 31177 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-14 18:01:11.350 10686 31177 31177 F DEBUG : Build fingerprint: 'Xiaomi/venus/venus:11/RKQ1.200928.002/V12.0.14.0.RKBCNXM:user/release-keys'
01-14 18:01:11.350 10686 31177 31177 F DEBUG : Revision: '0'
01-14 18:01:11.350 10686 31177 31177 F DEBUG : ABI: 'arm'
01-14 18:01:11.350 10686 31177 31177 F DEBUG : Timestamp: 2021-01-14 18:01:11+0800
01-14 18:01:11.350 10686 31177 31177 F DEBUG : pid: 31144, tid: 31144, name: xxx >>> xxx <<<
01-14 18:01:11.350 10686 31177 31177 F DEBUG : uid: 10686
01-14 18:01:11.350 10686 31177 31177 F DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xe7e15000
01-14 18:01:11.350 10686 31177 31177 F DEBUG : r0 00000000 r1 e7e15000 r2 00000000 r3 e51ff004
......
01-14 18:01:11.571 10686 31177 31177 F DEBUG : backtrace:
01-14 18:01:11.571 10686 31177 31177 F DEBUG : #00 pc 00020406 /data/app/~~B1wDWHt01dZ4xgeR9qXtEw==/xxx-xIZ3NSdHSP5cB-tYLjQrYA==/lib/arm/libDexHelper_sdk.so
01-14 18:01:11.571 10686 31177 31177 F DEBUG : #01 pc 00021b47 /data/app/~~B1wDWHt01dZ4xgeR9qXtEw==/xxx-xIZ3NSdHSP5cB-tYLjQrYA==/lib/arm/libDexHelper_sdk.so (pFE1FFE21C810240D8476E0376B1F05CD+18)
01-14 18:01:11.571 10686 31177 31177 F DEBUG : #02 pc 0001ff5d /data/app/~~B1wDWHt01dZ4xgeR9qXtEw==/xxx-xIZ3NSdHSP5cB-tYLjQrYA==/lib/arm/libDexHelper_sdk.so (pFF03AF407F2AEDDF5A59E1985C5A14AB+360)
......
3.乐固加固
- 样例问题trace1
03-03 17:26:20.978 10241 14180 14180 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
03-03 17:26:20.978 10241 14180 14180 F DEBUG : Build fingerprint: 'Xiaomi/grus/grus:10/QKQ1.190828.002/9.12.25:user/release-keys'
03-03 17:26:20.978 10241 14180 14180 F DEBUG : Revision: '0'
03-03 17:26:20.978 10241 14180 14180 F DEBUG : ABI: 'arm'
03-03 17:26:20.978 10241 14180 14180 F DEBUG : Timestamp: 2020-03-03 17:26:20+0800
03-03 17:26:20.978 10241 14180 14180 F DEBUG : pid: 14110, tid: 14110, name: xxx >>> xxx <<<
03-03 17:26:20.978 10241 14180 14180 F DEBUG : uid: 10241
03-03 17:26:20.978 10241 14180 14180 F DEBUG : signal 6 (SIGABRT), code 0 (SI_USER), fault addr --------
03-03 17:26:20.978 10241 14180 14180 F DEBUG : Abort message: 'JNI DETECTED ERROR IN APPLICATION: obj == null
03-03 17:26:20.978 10241 14180 14180 F DEBUG : in call to GetObjectField
03-03 17:26:20.978 10241 14180 14180 F DEBUG : from void com.tencent.StubShell.TxAppEntry.load(android.content.Context)'
03-03 17:26:20.978 10241 14180 14180 F DEBUG : r0 00000000 r1 0000371e r2 00000006 r3 ffbe8b30
......
03-03 17:26:21.204 10241 14180 14180 F DEBUG : backtrace:
03-03 17:26:21.204 10241 14180 14180 F DEBUG : #00 pc 00056dfe /apex/com.android.runtime/lib/bionic/libc.so (abort+166) (BuildId: b1803e2c54cf63f48664b8839ccf313b)
......
- 样例trace2
05-29 06:32:41.237 10390 6287 6287 E AndroidRuntime: FATAL EXCEPTION: main
05-29 06:32:41.237 10390 6287 6287 E AndroidRuntime: Process: xxx, PID: 6287
05-29 06:32:41.237 10390 6287 6287 E AndroidRuntime: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/core/content/FileProvider$PathStrategy;
05-29 06:32:41.237 10390 6287 6287 E AndroidRuntime: at androidx.core.content.FileProvider.getPathStrategy(FileProvider.java:576)
......
05-29 06:32:41.237 10390 6287 6287 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: androidx.core.content.FileProvider$PathStrategy
05-29 06:32:41.237 10390 6287 6287 E AndroidRuntime: ... 14 more
4.360加固
- 样例trace1
03-14 23:24:09.078 10272 15691 15691 D AndroidRuntime: Shutting down VM
03-14 23:24:09.078 10272 15691 15691 E AndroidRuntime: FATAL EXCEPTION: main
03-14 23:24:09.078 10272 15691 15691 E AndroidRuntime: Process: xxx, PID: 15691
03-14 23:24:09.078 10272 15691 15691 E AndroidRuntime: java.lang.RuntimeException: Unable to create application com.stub.StubApp: java.lang.RuntimeException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/stub/StubApp;
03-14 23:24:09.078 10272 15691 15691 E AndroidRuntime: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6997)
......
03-14 23:24:09.078 10272 15691 15691 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: com.stub.StubApp
03-14 23:24:09.078 10272 15691 15691 E AndroidRuntime: ... 13 more
5.百度加固
- 样例trace1
05-28 19:38:13.575 10209 5992 5992 F DEBUG : Build fingerprint: 'Xiaomi/venus/venus:12/SPB1.210331.013/eng.builde.20210525.073644:user/test-keys'
05-28 19:38:13.575 10209 5992 5992 F DEBUG : Revision: '0'
05-28 19:38:13.575 10209 5992 5992 F DEBUG : ABI: 'arm'
05-28 19:38:13.575 10209 5992 5992 F DEBUG : Timestamp: 2021-05-28 19:38:13.445686711+0800
05-28 19:38:13.575 10209 5992 5992 F DEBUG : Process uptime: 0s
05-28 19:38:13.575 10209 5992 5992 F DEBUG : pid: 5969, tid: 5969, name: xxx >>> xxx <<<
05-28 19:38:13.575 10209 5992 5992 F DEBUG : uid: 10209
05-28 19:38:13.575 10209 5992 5992 F DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x62696c0e
05-28 19:38:13.575 10209 5992 5992 F DEBUG : r0 62696c0e r1 ffd08284 r2 e78d01ad r3 dd422f24
05-28 19:38:13.575 10209 5992 5992 F DEBUG : r4 d7502b90 r5 f1cb9d09 r6 ffd08284 r7 f5b9e2f0
05-28 19:38:13.575 10209 5992 5992 F DEBUG : r8 f5cfdadf r9 f5db6314 r10 00000003 r11 f5d02427
05-28 19:38:13.575 10209 5992 5992 F DEBUG : ip e655ef3c sp ffd08268 lr dd419a07 pc f1cb9d08
05-28 19:38:13.575 10209 5992 5992 F DEBUG : backtrace:
05-28 19:38:13.575 10209 5992 5992 F DEBUG : #00 pc 00034d08 /apex/com.android.runtime/lib/bionic/libc.so (strcmp_a15+0) (BuildId: c95adaa6733585cf4f8f4efd331ecb2d)
05-28 19:38:13.575 10209 5992 5992 F DEBUG : #01 pc 00012a05 /data/app/~~eFnoVjNlNOx8V-dvL-_piw==/com.yukexing.mobileticket-uHImw17j1Y-uuPI3t8I8Iw==/lib/arm/libbaiduprotect.so
05-28 19:38:13.575 10209 5992 5992 F DEBUG : #02 pc 000125a3 /data/app/~~eFnoVjNlNOx8V-dvL-_piw==/com.yukexing.mobileticket-uHImw17j1Y-uuPI3t8I8Iw==/lib/arm/libbaiduprotect.so
......
若您的应用使用了以上的加固工具,请务必关注相应厂商的适配进度,以便第一时间更新加固工具以适配Android 12。若您使用的是其它加固工具,也请关注工具的Android 12适配情况。
6.2 其他问题
应用在启动时,创建activity报错闪退,报错信息是”Activity {packageName/compomentName} did not call through to super.onCreate()” ,经确认,这个问题是梆梆加固的问题,请遇到的开发者联系梆梆加固厂商,用最新的版本升级即可。
05-13 09:53:25.471 10732 15838 15838 E AndroidRuntime: FATAL EXCEPTION: main
05-13 09:53:25.471 10732 15838 15838 E AndroidRuntime: Process: xxxx, PID: xxx
05-13 09:53:25.471 10732 15838 15838 E AndroidRuntime: android.util.SuperNotCalledException: Activity {xxx/xxxx} did not call through to super.onCreate()
05-13 09:53:25.471 10732 15838 15838 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3549)
05-13 09:53:25.471 10732 15838 15838 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3729)
..............................................//此处省略
编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/12734/
部分内容来自网络投稿,如有侵权联系立删