我成功地从 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 卡而不是手机时这会起作用?