华为系统文件“源代码与字节码不匹配”

我们正在调试我们的一个应用程序的问题,该问题仅影响华为设备。为了调试它,我们购买了 P20 Lite ANE-LX1。我们在代码中放置了一些断点,并正在调查完整的堆栈跟踪。该设备安装了 Android 8.0,我们在 Android Studio 中下载了相同的 SDK。

当我们将设备连接到调试器并尝试调查堆栈跟踪时,我们在系统源文件中收到以下错误:

http://img2.mukewang.com/60e567c400012b5918980846.jpg

使用堆栈跟踪后,我们可以确认我们的源文件确实与设备上安装的文件不对应。有时,调试器指向functionA被调用的一行,在堆栈跟踪中,我们看到它functionB被调用了。我们可以确认受此问题影响的文件是:

  1. VideoView,

  2. MediaPlayer,

  3. ContentProvider.

我们已经尝试了我们能找到的所有可能的解决方案,包括清理项目、从 Android Studio 中删除任何额外的 SDK、修改项目设置 - 没有任何帮助来解决这个问题。

这让我们相信华为在他们的设备上安装了 Android 8.0 的修改版本,这就是我们无法调试系统文件的堆栈跟踪的原因。我们确实联系了华为,试图澄清这一点。

同时,如果您能向我们提出任何相关的想法,我们将不胜感激。也许您知道在哪里可以获取华为在其设备上安装的源文件?或者您可能知道如何以其他方式修复源代码和字节码之间的这种不匹配?


交互式爱情
浏览 356回答 2
2回答

精慕HU

显然华为分叉了AOSP并修改了它的来源。这是许多制造商所做的,只要源通过兼容性测试套件就完全没问题。我自己在华为 P20 上看到了与他们自定义 ROM 的方法有关的加密视频播放问题。但是回到正题——您可以从 /system/framework/arm/boot.oat 或 boot-framework.oat 或 /system/framework/boot.vdex 获取在您的设备上运行的确切框架代码。我不知道这些文件的确切结构,但它因 Android 版本和制造商而异。一旦你通过 adb pull 获得这些文件(你肯定需要 root 来做这个)你可以使用 dex2jar 或其他工具执行 oat->dex、dex->jar ,你将获得源代码。传统上可以从 /system/framework/framework.jar 获取框架代码,但是在引入 ART 之后,这些文件在系统映像上通常是空的,而是使用预编译的框架代码。

红颜莎娜

我相信我在手机上遇到了类似的问题,但我使用的是 Google Pixel。我最初担心手机不知何故受到了损害。我认为这不太可能是华为的问题,更有可能是 Android Studio 没有使源包保持最新的问题。您的组件安装程序屏幕截图显示 Android Studio 正在下载 SDK 源的修订版 1 - 但大多数 SDK 使用的是更高版本。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java