Android APK拒绝在某些设备上安装其本机.so/data

Android APK拒绝在某些设备上安装其本机.so/data,android,android-ndk,Android,Android Ndk,我成功地编译并打包了来自Android NDK的NativeActivity示例。它在Android emulator中运行良好,甚至在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.n

我成功地编译并打包了来自Android NDK的NativeActivity示例。它在Android emulator中运行良好,甚至在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!我甚至尝试手动复制。所以在那里,但当我试图启动它时,应用程序仍然崩溃

为什么安装程序允许安装APK,但拒绝复制。那么

模拟器正在运行Android 2.3.3 Nook Color正在运行Android 4.0.4 Tegra2手机运行的是安卓2.3.7

更新:

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

另一个更新:

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

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

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

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

APP_ABI:=armeabi x86 armeabi-v7a mips

只有在你有NDK r8的情况下才有MIPS


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混淆问题是错误的,那么您可能已经找到了一个解决方法的怪癖,但可能不是您希望用户依赖的解决方法。当然,应该是这样的。如果Tegra2手机上的lib加载程序出现问题,我并不感到惊讶。请检查设备上的
getprop ro.product.cpu.abi2
命令的输出(使用命令行上的
adb shell getprop ro.product.cpu.abi2
)。LG P999/T-Mobile G2x:ro.product.cpu.abi=armeabi-v7a ro.product.cpu.abi2=armeabi