【问题标题】:Android APK refuses to install its native .so into /data on some devicesAndroid APK 拒绝将其原生 .so 安装到某些设备上的 /data 中
【发布时间】:2012-07-02 14:53:34
【问题描述】:

我成功编译并打包了 Android NDK 中的 NativeActivity 示例。它在 Android 模拟器甚至 TI OMAP3621 设备(Nook Color)上运行良好。但是,它在 Tegra 2 设备上崩溃。我还注意到 APK 中包含的 .so 被复制到 Nook 上的 /dev/dev/com.example.native_activity/lib/libnative-activity.so 中,但在 Tegra 2 手机上没有。确实创建了 /data/data/com.example.native_activity/lib 目录,但是缺少应该在其中的 .so !我什至尝试手动将 .so 复制到那里,但是当我尝试启动它时应用程序仍然崩溃。

为什么安装程序允许安装 APK,但拒绝复制 .so?

模拟器运行的是 Android 2.3.3 Nook Color 运行的是 Android 4.0.4 Tegra 2 手机运行的是 Android 2.3.7

更新:

如果我手动将 .so 复制到 /data,应用程序 确实 会运行。所以现在问题似乎是由于 aapt 的包装,因为当手机安装应用程序时,它不会复制 .so。我从命令行使用 aapt(不是通过 Eclipse),所以在包含共享库时我可能没有使用正确的选项。谁能解释一下 aapt 如何打包一个包含本机共享库的 APK?

另一个更新:

嗯,这很奇怪。我刚刚发现,如果我安装了 APK,然后立即在已安装的应用程序上获取应用程序信息并“移动到 SD 卡”,它就可以了! .so 按预期复制到 /data/data/com.example/native-activity。如果我随后选择“移至手机”,它也可以工作!

我在 Tegra 2 设备上运行 Cyanogenmod 7。为什么在移动/安装到 SD 卡而不是手机时这会起作用?

【问题讨论】:

  • APK 文件为 ZIP 格式。你能检查一下这个文件的树结构吗?在我的例子中,“unzip -l mine.apk”给出“lib/armeabi/libmine.apk”和“lib/armeabi-v7a/libmine.apk”——一个是为 APP_ABI=armeabi 而编译的,另一个是为 APP_ABI=armeabi -v7a。 Tegra2 设备应该从 lib/armeabi-v7a 加载库。
  • 您的意思是“libmine.so”而不是“libmine.apk”吗?我的 APK 包含一个 lib 目录,其中包含 .so 中的本机代码:lib/armeabi/libnative-activity.so。同样,它适用于某些设备,但不是所有设备。
  • 您应该完全卸载它并正常重新安装,看看会发生什么。如果人们谈论的 4.x 的 ABI 混淆问题是错误的,那么您可能已经找到了一种解决方法的怪癖,但可能不是您想让用户依赖的方法。
  • 当然,.so 应该是。如果您的 Tegra2 手机上的 lib 加载程序有问题,我并不感到惊讶。请检查设备上@9​​87654321@ 命令的输出(在命令行上使用adb shell getprop ro.product.cpu.abi2)。
  • LG P999 / T-Mobile G2x:ro.product.cpu.abi=armeabi-v7a ro.product.cpu.abi2=armeabi

标签: android android-ndk


【解决方案1】:

Library file not loading in 2.3 but loading in 4.0

为所有可能的 CPU/ABI 组合重新构建。 Android 4 经常尝试 在 Android 2.x 对 armeabi 满意时加载 armeabi-v7a。

为此,在 jni 文件夹中创建/打开 Application.mk,然后将 以下:

APP_ABI := armeabi x86 armeabi-v7a mips

仅当您拥有 NDK r8 时才使用 MIPS。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-08
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2014-08-06
    • 2019-11-19
    • 2020-04-28
    相关资源
    最近更新 更多