【问题标题】:What's the difference between a regular Android APK and one included as part of a device's system image?常规 Android APK 与作为设备系统映像的一部分包含的 Android APK 有什么区别?
【发布时间】:2010-08-18 20:34:36
【问题描述】:

我们有一家制造商想在他们的 Android 设备上预装我们的应用程序。我们向他们发送了 APK,即使它在用户使用时安装良好,但在包含在制造商的构建映像中时似乎没有正确安装。仅供参考,我们的应用程序使用 JNI 层和一些使用 NDK 构建的库。我们看到的异常似乎表明类加载器找不到库并且无法加载它。他们已验证库文件确实存在于 APK 中。

由于我们不制造设备,因此不清楚为什么他们会看到此异常,以及在将包作为 Android 构建映像的一部分时需要采取哪些不同的措施。

这里有 Android 人愿意发表评论吗?

【问题讨论】:

    标签: android image build system packaging


    【解决方案1】:

    我使用过预安装的 Android 应用程序,这些应用程序也使用库文件,在我的情况下是 jar 文件。我假设您已将适当的行添加到 AndroidManifest.xml,例如 <uses-library android:name....。我还假设您已经提供了有关如何在手机上安装库文件的说明,并在命令提示符下提供了诸如 adb push ... 之类的说明。如果您还没有,请向他们提供说明。

    另一个问题可能是权限,我们必须获取库 jar 并安装权限 xml 文件,这可能是问题。

    还要确保您使用的是正确版本的 Android 进行测试。如果一切都失败了,请他们将其中一部无法使用的手机发送给您,然后您可以与办公室中的手机进行比较并进行调试。祝你好运,因为这一切都可能令人沮丧。

    【讨论】:

    • 其中两个库实际上是我们通过 JNI 访问的 C 共享对象库——这有什么区别吗? (运行时异常似乎表明加载库时出现问题:-)
    • 一种可能的调试方法是编写一个简单的测试应用程序来加载这些库。将应用程序提供给手机制造商。如果他们成功运行了应用程序,那么加载库的问题就不是问题了。根据他们的反馈,您可以调试它。仅针对这些类型的场景,我们有许多方便的测试应用程序。希望这会有所帮助。
    【解决方案2】:

    除了将apk文件移动到/system/app之外,你应该要求制造商将NDK创建的原生库(.so文件)移动到/system/lib或LD_LIBRARY_PATH指定的路径。

    详情请咨询https://groups.google.com/d/topic/android-porting/r_Ao7_PWgKQ。

    【讨论】:

      猜你喜欢
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 2021-08-12
      • 2015-07-27
      相关资源
      最近更新 更多