概述
只使用 Android SDK 中的公开接口进行应用开发。公开 SDK 接口有详细的技术文档和支持渠道,未来的 Android 新版本也会保证公开 SDK 接口的兼容性 (即使有改动,也会在文档中详细阐明)。
请尽早在 Android P 预览版中测试您的应用,您可以运行并操作应用,然后在 adb logcat 中查找类似下方的内容,其中包含了应用调用的非 SDK 接口名,所属黑/灰名单和调用的方式: Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI) Accessing hidden method Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread; (dark greylist, reflection)
如果您有合理的理由,必须使用某个非 SDK 接口,请在文章下方留言给我们,我们非常期待聆听和与您进行讨论,并会在充分评估必要性和可行性后,提供可能的方案来满足合理的功能需求。
问题 4: 直接调用 dex2oat,或者使用不支持 / 不正确的方式编译 dex 文件
原因:
从一开始,dex2oat 就被设计为系统内部使用的编译部署工具,Android 从来都未支持过开发者直接调用 dex2oat 的场景。我们会持续而不定期地对这个工具进行优化,而很多时候其行为变更 (如: 生成的文件及其格式) 都是与之前不兼容的。在大多数情况下,标准的类加载器 (BaseDexClassLoader / DexClassLoader / PathClassLoader) 无法找到或使用由直接调用 dex2oat 生成的文件。
此外请注意,从 Android O 开始,BaseDexClassLoader 和 DexClassLoader 构造函数中的 “optimizedDirectory” 参数已废弃,并在加载 dex 文件时不起作用。
建议:
如果您需要从内存中加载 dex 文件,而不愿在存储中留下痕迹,请使用 Android O 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 中新增的加载器 InMemoryDexClassLoader。
问题 5: 注入或篡改 Android Studio 生成的 dex 和 so 文件
原因:
Android Studio 生成的 dex 文件虽然有公开的布局格式,但具体内容还是会在运行时被系统在后台进行编译优化。如果您在 dex 文件中写入自定义的内容,很可能这些自定义的写入操作与系统优化发生冲突,以致自定义的内容被擦除或覆盖,甚至导致优化后的 dex 在执行时直接崩溃。
Android Studio 生成的 so 文件包含一些元数据 (如 ELF headers 和 section headers),以备动态链接器进行完整性检查。篡改 so 文件并不会带来安全性的提升 (很多工具可以重新生成元数据),反而可能导致应用无法在未来的 Android 版本中启动 (由于动态链接器可能执行更严格的检查)。更多关于 so 文件的要求,您可在公众号平台发送信息 “so文件” 获取相关链接。
建议:
不要修改 Android Studio 生成的 dex 和 so 文件。
问题 6: 应用在 Android P 上启动时显示 “This app was built for an older version of Android and may not work properly…”
原因:
应用的 targetSdkVersion 太旧 ( <17 )
建议:
升级您应用的 targetSdkVersion 至最新版本,您可在公众号平台发送信息 “targetsdkversion” 获取相关文档链接。
问题7: 应用在特长屏幕上未能正确显示,部分内容超出屏幕
原因:
Android O 开始支持特长屏幕,而且已经有很多厂商开始发布特长屏幕的手机。应用对屏幕的显示比例做出错误的假设,而未能支持 16:9 以上的纵横比,进而影响用户体验。
建议:
修改您的应用,使他能够适应不同的屏幕尺寸 (包括 16:9 以上的纵横比)。
如果自适应式 UI 不适合您的场景,可以考虑在 manifest 中的 内设置 resizableActivity = false,并加上 android:MaxAspectRatio 来声明最大支持纵横比。这会在特长屏幕的设备上启用兼容模式,把应用边缘的显示空间以黑色填充。
问题 8: 应用在特长屏幕上未能正确显示,上下出现黑边
原因:
Android O 开始支持特长屏幕,而且已经有很多厂商开始发布特长屏幕的手机。应用对未能支持 16:9 以上的纵横比会在特长屏幕的设备上启用兼容模式,把应用边缘的显示空间以黑色填充。
建议:
升级您应用的 targetSdkVersion 至最新版本,您可在公众号平台发送信息 “targetsdkversion” 获取相关文档链接。
请参考下列 Android P 相关文档,使您的应用尽早兼容 Android P:
[设置 SDK 和模拟器](()
[迁移指南](()
[行为变更](()
[新功能及 API](()
如果您在 Android P 的兼容性工作中有什么经验和体会,欢迎在文章下方留言与我们分享。谢谢!
最后
以上就是自然八宝粥为你收集整理的Android P 应用兼容常见错误及建议的全部内容,希望文章能够帮你解决Android P 应用兼容常见错误及建议所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复