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 に手動でコピーすると、アプリが実行されることがわかりました。電話がアプリをインストールするときに.so. コマンドラインから(Eclipseではなく)aaptを使用しているため、共有ライブラリを含めるときに適切なオプションを使用していない可能性があります。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を読み込もうとしますが、Android2.xはarmeabiに満足しています。

これを行うには、jniフォルダーにApplication.mkを作成して開き、以下を配置します。

APP_ABI:= armeabi x86 armeabi-v7a mips

NDKr8を使用している場合にのみMIPS。

于 2012-06-16T17:37:21.117 に答える