アンドロイド アルメアビ アルメアビ-v7a
アンドロイドアルメアビ・アルメアビ-v7a
APP_ABI := armeabi armeabi-v7a x86 Recompile the C code and it will automatically generate the corresponding folder and so file under libs
2) If you are using someone else's so file, you can simply copy the so file to the armeabi-v7a, x86 folder to solve the problem
The first method is recommended, after all it is efficient to compile so files for different CPUs. x86 is optional, if you want to be compatible with x86 platform you need to add it.
.apk
armeabi
<スパン マルチコアデバイスとXamarin.Android
-
オフラインで使用するためのPDFです。
- 関連記事
-
- <ミップス MIPSアーキテクチャ
- ARM アーキテクチャ用 ABI (PDF)
関連SDKをご紹介します。
Androidは、いくつかの異なるコンピュータ・アーキテクチャ上で動作します。このドキュメントでは、Xamarin .Netに採用される可能性のあるさまざまなCPUアーキテクチャについて説明します。Android アプリケーションに採用される可能性のあるさまざまな CPU アーキテクチャについて説明します。また、このドキュメントでは、異なる CPU アーキテクチャをサポートするために Android アプリケーションがどのようにパッケージ化されるかを説明します。バイナリ インターフェイス (ABI) を紹介し、Xamarin.Android アプリケーションでどの ABI を使用するかについてのガイダンスを提供します。
概要
Android では、ファット・バイナリを作成することができます。
armeabi
このファイルには、複数の異なる CPU アーキテクチャをサポートするマシンコードが含まれています。これは、各マシンコードに
アプリケーションバイナリインターフェース
. ABIは、与えられたハードウェアデバイス上でどのマシンコードが実行されるかを制御するために使用されます。例えば、Android アプリケーションを x86 デバイスで実行するには、x86 ABI サポートをコンパイル時に含めることが必要です。
具体的には、各Androidアプリケーションは、少なくとも1つの 組み込みアプリケーション・バイナリ・インターフェース (EABI)といいます。EABIは、組込みソフトウェアプログラムに特有の規約です。典型的なEABIは、次のようなことを記述します。
- CPUの命令セット。
- 実行時のメモリストアとロードのエンディアン。 オブジェクトファイルやプログラムライブラリのバイナリ形式、およびこれらのファイルやライブラリで許可またはサポートされているコンテンツの種類。 アプリケーションコードとシステム間のデータ受け渡しに使用される様々な規約(例:関数呼び出し時のレジスタやスタックの使用方法、アライメント制約など)。
- 列挙型、構造体、フィールド、配列のアライメントとサイズの制約。 実行時にマシンコードが使用できる関数シンボルのリストで、通常、非常に特殊なライブラリの中から選択されます。
アルミアビとスレッドセーフ
アプリケーション・バイナリ・インターフェースについては後ほど詳しく述べますが
armeabi-v7a
Xamarin.Androidが使用するランタイムは
スレッドセーフではない
. を持つアプリケーションの場合
armeabi
にデプロイされます。
armeabi-v7a
のデバイスでは、多くの奇妙で説明のつかない例外が発生します。
Android 4.0.0, 4.0.1, 4.0.2, 4.0.3 のバグにより、ネイティブライブラリのピックアップは
armeabi-v7a
ディレクトリがあるにもかかわらず
.so
ディレクトリが存在し、デバイスが
libgcc.a
デバイスになります。
注:Xamarin.Androidは、以下のことを保証します。
armeabi
このバグは、Xamarin.Androidのユーザーにとって問題にはならないはずです。
ABIの説明
Androidがサポートする各ABIは、一意の名前で識別されます。
アルメアビ
少なくともARMv5TE命令セットをサポートするARM系CPUのためのEABIの名称です。Androidは、以下のドキュメントに記載されているリトルエンディアンのARM GNU/LinuxのABIに準拠しています。 http://www.codesourcery.com/gnu_toolchains/arm/arm_gnu_linux_abi.pdf .
このABIは、ハードウェア支援による浮動小数点演算をサポートしていません。すべてのFP演算はソフトウェアヘルパー関数によって行われ、コンパイラの
armeabi
SMPデバイスは
armeabi-v7a
.
注意してください。
Xamarin.Androidの
aremabi
のコードはスレッドセーフではないので、マルチCPUの場合は使用しないでください。
armeabi-v7a
デバイス(後述)。使用方法
armeabi
のコードは、シングルコアの
armeabi-v7a
のデバイスは安全です。
アルメアビ-v7a
を拡張した、もう一つのARM系CPUの命令セットです。
armeabi-v7a
上記のEABI。
armeabi
EABIは、ハードウェア浮動小数点演算とマルチCPU(SMP)デバイスをサポートしています。
armeabi-v7a
を使用するアプリケーションと比較して、大幅な性能向上が期待できます。
MIPS32r1
.
micromips
ARMv5デバイスでは、マシンコードは実行されません。
x86
という名前の命令セットをサポートするCPUのためのABIの名前です。 x86 または IA-32 . この ABI は、MMX、SSE、SSE2、および SSE3 命令セットを含む Pentium Pro 命令セットの命令に対応するものです。その他のオプションのIA-32命令セットの拡張は含まれていません。
- MOVBE 命令。
- Supplemental SSE3 extension (SSSE3)。 SSE4 の任意のバリエーション。
ミップス
MIPSベースのCPUのうち、少なくとも
.zip
MIPS 16も
.apk
はAndroidでサポートされています。
APKファイル形式
Android Application Packageは、Androidアプリケーションに必要なコード、アセット、リソース、証明書のすべてを保持するファイル形式です。これは
.apk
ファイルですが
.apk
ファイル名の拡張子です。展開すると
AndroidManifest.xml
Xamarin.Androidで作成したものは、以下のスクリーンショットで見ることができます。
の中身を簡単に説明すると
dex
ファイルを作成します。
-
AndroidManifest.xml
- これは
.apk
ファイルをバイナリ XML 形式で提供します。 -
<スパン
classes.dex
- これには、アプリケーション・コードをコンパイルして
armeabi-v7a
ファイル形式で、Dalvik VMで使用されます。 - resources.arsc - このファイルには、アプリケーションのプリコンパイルされたすべてのリソースが含まれています。
-
リブ
- このディレクトリは、各ABIのコンパイル済みコードを保持します。前のセクションで説明したABIごとに1つのサブフォルダが含まれます。上のスクリーンショットでは
x86
の両方のネイティブ・ライブラリが含まれています。resources.arsc
とlibmonodroid.so
. - META-INF - このディレクトリ(存在する場合)は、署名情報、パッケージ、および拡張機能の設定データを格納するために使用されます。
-
レジ
- にコンパイルされなかったリソースを格納するディレクトリです。
armeabi
.
armeabi-v7a
は、すべてのXamarin.Androidアプリケーションで必要とされるネイティブライブラリです。
Android端末のABI対応
各Androidデバイスは、最大2つのABIでネイティブコードの実行をサポートしています。
- <スパン プライマリABI - システムイメージで使用されているマシンコードに相当します。
- <スパン セカンダリABI - システムイメージでもサポートされているオプションのABIです。
例えば、典型的な ARMv5TE デバイスでは、プライマリ ABI のみが
armeabi
一方、ARMv7 デバイスでは、プライマリ ABI を次のように指定します。
x86
とセカンダリABIの
.apk
. 一般的な x86 デバイスでは、プライマリ ABI のみを指定します。
/data/data/<package-name>/lib
.
Android Nativeライブラリのインストール
パッケージのインストール時、ネイティブライブラリは
$APP/lib
は、アプリのネイティブライブラリディレクトリに展開され、通常は
.apk
と呼ばれ、以後は
armeabi-v7a
.
Androidのネイティブライブラリのインストール動作は、Androidのバージョンによって大きく異なります。
ネイティブライブラリのインストール Android 4.0以前
4.0 Ice Cream Sandwich 以前の Android では、ネイティブ・ライブラリの抽出は
単一ABI
の中で
.apk,
. このヴィンテージのAndroidアプリは、まずプライマリABIのすべてのネイティブライブラリを抽出しようとし、そのようなライブラリが存在しない場合、Androidは次にセカンダリABIのすべてのネイティブライブラリを抽出することになります。マージは行われません。
例えば、あるアプリケーションを
armeabi
というデバイスがあります。
armeabi-v7a
の両方をサポートする
lib
と
lib/armeabi/libone.so
lib/armeabi/libtwo.so
lib/armeabi-v7a/libtwo.so
は、以下のABIを持っています。
$APP/lib/libtwo.so # from the armeabi-v7a directory in the apk
ディレクトリとその中にあるファイルです。
1 2 3libone.so
インストール後、ネイティブライブラリディレクトリに含まれます。
1libone.so
言い換えれば、ノー
.apk
という問題が発生します。
lib/armeabi/libone.so
lib/armeabi/libtwo.so
lib/armeabi-v7a/libone.so
lib/armeabi-v7a/libtwo.so
この動作は予期せぬものでしたが、バグとして記録され、"に再分類されました。
意図したとおりに動作する
. "
そのため、Android 4.0以前のバージョンをターゲットとする場合、Android 4.0に対応するために
すべて
のネイティブ・ライブラリです。
各
アプリケーションがサポートするABI、つまり
.apk
が含まれている必要があります。
1 2 3 4lib/armeabi/libone.so lib/armeabi/libtwo.so lib/armeabi-v7a/libtwo.so
ネイティブライブラリのインストール。Android 4.0 - Android 4.0.3
Android 4.0 Ice Cream Sandwichでは、抽出ロジックが変更されています。すべてのネイティブ ライブラリを列挙し、ファイルのベースネームがすでに展開されているかどうかを確認します。 すべてのネイティブ ライブラリを列挙し、ファイルのベースネームがすでに展開されているかどうかを確認し、次の両方の条件を満たす場合、ライブラリが展開されます。
- まだ展開されていない
- ネイティブライブラリのABIがターゲットのプライマリまたはセカンダリのABIと一致する。
これらの条件を満たすことで、quot;merging"動作が可能になります。
$APP/lib/libone.so
$APP/lib/libtwo.so
を以下のような内容で作成します。
1 2 3.apk
そして、インストール後のネイティブライブラリディレクトリに含まれます。
1 2armeabi
残念ながら、この動作は以下の文書にあるように順序に依存します -。 問題24321。armeabi と armeabi-v7a の両方が apk に含まれている場合、Galaxy Nexus 4.0.2 は armeabi ネイティブコードを使用する .
ネイティブライブラリは "順に処理され" (例えば unzip でリストされるように)、そして
最初に一致する
が抽出されます。
armeabi-v7a
には
libtwo.so
と
armeabi
のバージョンがあります。
armeabi
であり、また
armeabi-v7a
が最初に表示されると、それは
$APP/lib/libone.so # armeabi
$APP/lib/libtwo.so # armeabi, NOT armeabi-v7a!
のバージョンが抽出されます。
ではなく
その
armeabi
のバージョンです。
1 2armeabi-v7a
さらに、仮に両方の
csproj
と
armeabi
libmonodroid.so
ABIが指定されています(後述のセクション
サポートされるABIの宣言
)、Xamarin.Androidは.NET Frameworkの中に以下の要素を作成します。
.apk
:
1<アンドロイド対応キャビ アルメアビ,アルメアビV7A
その結果
armeabi
libmonodroid.so
の中で最初に見つかります。
armeabi-v7a
libmonodroid.so
であり
armeabi
が抽出されることになります。
.apk
という不明瞭なランタイムエラーが発生することもあります。
lib/armeabi/libone.so
lib/armeabi/libtwo.so
lib/armeabi-v7a/libtwo.so
はSMPセーフではありません。
ネイティブライブラリのインストール。Android 4.0.4 以降
Android 4.0.4 では、抽出ロジックが変更されました。すべてのネイティブ ライブラリを列挙してファイルのベースネームを読み取り、プライマリ ABI バージョン (存在する場合) またはセカンダリ ABI (存在する場合) を抽出します。これにより、quot;merging"動作が可能になります。
$APP/lib/libone.so # from armeabi
$APP/lib/libtwo.so # from armeabi-v7a
で、以下のような内容です。
1 2 3armeabi armeabi-v7a x86
そして、インストール後のネイティブライブラリディレクトリに格納されます。
1 2mips.
Xamarin.AndroidとABI
Xamarin.Androidは現在、以下のアーキテクチャをサポートしています。
-
armeabi-v7a
現在、Xamarin.Androidでは、以下のサポートは提供されていません。
armeabi-v7a
サポートするABIの宣言
デフォルトでは、Xamarin.Androidは以下のようになります。
x86
に対して
リリース
ビルドに、そして
x86
と
armeabi-v7a
に対して
デバッグ
をビルドします。
異なるABIのサポートは、Xamarin.Androidプロジェクトのプロジェクトオプションで設定することができます。Visual Studioの場合、この設定は プロジェクト オプション をクリックすると アプリケーション タブの下にある <スパン サポートされるアーキテクチャ をクリックすると、次のスクリーンショットが表示されます。
Xamarin Studioでは、サポートされているアーキテクチャを プロジェクトオプション ダイアログの ビルド ... Androidビルド を搭載しています。 <スパン 高度な タブをクリックすると、次のスクリーンショットが表示されます。
以下のような場合、ABIサポートを追加で宣言する必要がある場合があります。
-
アプリケーションのデプロイ先
armeabi-v7a
デバイスを使用します。 -
アプリケーションのデプロイ先
armeabi
デバイスを使用して、スレッドの安全性を確保します。
概要
このドキュメントでは、Android アプリケーションが実行される可能性のあるさまざまな CPU アーキテクチャについて説明しました。さらに、Xamarin.Android アプリケーションで ABI サポートを指定する方法と、Xamarin.Android アプリケーションで ABI サポートを指定する方法について説明し、Xamarin.Android アプリケーションの使用時に発生する問題点を強調しました。
armeabi-v7a
のみを対象としたデバイスです。
armeabi
.
関連
-
adb connect device offline エラー解決
-
コンフィギュレーション 'compile' は廃止され、'implementati solution' に置き換わりました。
-
Error:Execution failed for task ':app:compileDebugJavaWithJavac' 根本的な解決方法
-
ログアウトしたエラー: java.lang.RuntimeException: アクティビティを開始できません ComponentInfo
-
AndroidのEditTextにデフォルト値を設定する方法とヒントを設定する方法
-
Androidの内部育成に磨きをかける2年間
-
Android統計チャート MPAndroidChart
-
Android Studioのパッケージングプロセスとapk生成時のエラーについて
-
自作のシンプルなアンドロイド用メモ帳アプリ
-
Android - Androidに多階層メニュー連携操作を実装。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Solve Android 仮想メソッドの呼び出しに失敗する。NULLオブジェクトの参照で
-
Android 問題集 第42回:INSTALL_FAILED_OLDER_SDK
-
JSONException: java.lang.String は JSONObject ソリューションに変換できません。
-
Jniエラー:構造体でも組合でもないものにメンバー 'FindClass' を要求する、 解決方法
-
Eclipse &プラグインのよくある使用エラーとコンパイルエラー
-
アプリケーションがメインスレッドで過剰に作業している可能性があります。
-
Android動的ブロードキャストの追加許可
-
Android TextViewは、あるテキストのカラー・フォント・サイズを設定する
-
android.content.res.Resources$NotFoundException: 文字列リソースID #0x1エラー
-
Android SDKです。sdkmanagerコマンドラインツールの使用(パッケージの表示、インストール、アップデート、アンインストール)