当前位置:首页 » APP上架 » 正文

Android 12 应用适配指南4 迁移指南 

网页加壳生成app

Android 12 应用适配指南4 迁移指南

迁移指南

每次发布新的 Android 版本时,都会推出一些全新的功能并引入一些行为变更,目的就在于提高 Android 的实用性、安全性和性能。在许多情况下,您的应用都可以直接使用并完全按预期运行;而在其他的一些情况下,您可能需要对应用进行更新以适应这些平台变更。为了确保您的用户在Android 12上获得良好体验,请按照如下方法,将您的应用迁移到Android 12。

常见的迁移包含两个阶段,这两个阶段可以同时进行:

  1. 确保应用兼容性(在 Android 12 最终发布前)
  2. 针对新平台的功能和 API 调整应用(最终发布后尽快进行)

5.1 确保应用与Android 12兼容

您通常可以调整应用并发布更新,而无需更改应用的 ​targetSdkVersion​。您必须测试现有应用在 Android 12 上的运行情况,以确保更新到最新版 Android 的用户获得良好的体验。有些平台变更可能会影响应用的行为方式,在开始测试之前,请仔细阅读“应用变更:所有应用”章节的内容,即使您不更改应用的​targetSdkVersion​,这些变更也可能会影响您的应用。

Android 12 应用适配指南4 迁移指南 Android 12 应用适配指南4 迁移指南 

请务必查看并测试非 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 应用适配指南4 迁移指南 Android 12 应用适配指南4 迁移指南 

编译应用并将其安装到搭载 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。
在我们的测试中,存在兼容性问题的第三方加固工具有:

  1. 爱加密加固
  • 样例问题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/

部分内容来自网络投稿,如有侵权联系立删

未经允许不得转载:一门应用 » Android 12 应用适配指南4 迁移指南 

相关推荐

联系我们

微信公众号

yimendabao

关注官方微信,了解最新资讯

客服QQ
4001658508

企业QQ,点击发起咨询