28

バックグラウンド

最近、NDKを使用してコードの開発を開始しましたが、NDKを使用して開発しているときに発生する可能性のある移植性の問題について考えました。

問題

NDKはネイティブコードを使用するため、CPUアーキテクチャごとにコンパイルする必要があります。デバイスのCPUに関係なく、ユーザーはアプリを実行する必要があるため、これは問題です。

私がこれまでに見つけた可能な解決策

ファイル「jni/Application.mk」を変更して、次を使用できることに気づきました。

APP_ABI:= armeabi armeabi-v7a x86

しかし、このステップから何をすべきかわかりません。アプリには、CPUアーキテクチャごとにコンパイルされたすべてのコードが含まれ、実行時に正しいコードが自動的に選択されますか?

また、未知の別のCPUアーキテクチャがある場合はどうなりますか?

Google TVでアプリを実行しようとするとどうなりますか?覚えていることによると、NDKはまったくサポートされていません。

私が見つけたもう1つの解決策は、マルチAPKサポートです。しかし、私にはわかりません。それはすべて、毎回異なる構成で同じAPKを作成することを意味しますか?それを支援するADTの特別な自動化ツールはありませんか?

4

2 に答える 2

33

まったく設定APP_ABIしない場合、または使用する場合

APP_ABI := all

Application.mkで、ndk-buildは、ご使用のバージョンのNDKでサポートされているすべてのアーキテクチャ用にビルドされます。最新のもの、これまでのr8dは、armeabi armeabi-v7a x86ビルドに加えてmips。別のアーキテクチャがリリースされると、それをサポートするようにAPKが自動的に構築されることを願っています。

アプリケーションがAndroidデバイスにインストールされると、システムは自動的に一致するABIバージョンを選択し、APKから正しい共有ライブラリをインストールします。

このアプローチの欠点の1つは、ネイティブライブラリが大きい場合、「モノリシック」APKファイルが巨大になる可能性があることです。マルチAPKアプローチを使用して、ユーザーのダウンロードを少なくすることができます。公式サイトの推奨事項:APKが大きすぎる(50MBを超える)場合にのみ、通常、複数のAPKを使用してさまざまなデバイス構成をサポートする必要があります。このルートを選択する場合は、バージョンコードのギルドラインに注意深く従う必要があります。

残念ながら、Google TVでのNDKのサポートに関して信頼できる予言はありませんが、現在利用できないことを技術的に正当化することはできないようです。到着すると、ndk-buildが自動的に処理します。

更新 これは、分割APKを維持するための簡単なプロセスですちなみに、新しいAndroidTVはNDKをサポートしています。

于 2013-01-20T08:55:21.657 に答える
5

最新バージョン(現在はr9)の場合、「jni/Application.mk」で指定する必要があります

APP_ABI := all

また

APP_ABI := armeabi armeabi-v7a x86 mips

./ndk_buildがないと、「armeabi」のみがビルドされます

于 2014-02-14T10:06:27.770 に答える