3

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

4

1 回答 1

2

库文件未在 2.3 中加载但在 4.0 中加载

重建所有可能的 CPU/ABI 组合。Android 4 经常尝试加载 armeabi-v7a,而 Android 2.x 对 armeabi 很满意。

为此,请在 jni 文件夹中创建/打开 Application.mk,然后放置以下内容:

APP_ABI := armeabi x86 armeabi-v7a mips

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

于 2012-06-16T17:37:21.117 回答