インテル®コンパイラーとGNU gccを使用してx86 APKとARM APKを作成します

ARMまたはx86命令セットアーキテクチャ(ISA)を搭載したプロセッサにはAndroidデバイスがあります。 さまざまな命令セットアーキテクチャはバイナリ互換ではないため、ネイティブコードを含むアプリケーションには、各アーキテクチャのネイティブライブラリを含める必要があります。 このようなアプリケーションの配布メカニズムの1つは、いわゆる「厚い」Androidアプリケーションパッケージ(「厚い」APK)です。

この記事では、Dalvik仮想マシンのアーキテクチャに依存しないファイル(Dalvik、2013)やさまざまなアーキテクチャのライブラリを含む、このような「厚い」APKパッケージを作成するための手順を説明します。 この記事では、Intel Integrated Native Developer Experience(INDE)を使用してネイティブx86アプリケーションライブラリを構築する方法について説明します。

デモンストレーションのために、NDK r10配布キット(Intel INDEインストールに含まれています)のhello-jniサンプルを使用します。

ビルド環境の準備


以下のソフトウェアが必要です。 指示に従ってインストールします。
1.インストール:
Microsoft .NET Framework
Java Development Kit 7u67は[jdk7-dir]にインストールする必要があります。
2.このフォルダーをPATH環境変数に追加します。
[jdk7-dir] \ jre \ binディレクトリは、Java仮想マシンを使用します。 これはantに必要です。
Windows環境の場合、 プログラムファイル(x86)のフォルダーの短い名前(タイプPROGRA〜2 )を指定することを忘れないでください。
3.新しい環境変数を作成します。
JAVA_HOME = [jdk7-dir]
4.インストール:
Intel Integrated Native Developer Experienceは[inde-dir]にインストールする必要があります。
5.このフォルダーをPATH環境変数に追加します。
[ant-dir] \ antツールを使用するためのbinディレクトリ (デフォルトの場所[ant-dir][inde-dir] \ IDEintegration

コマンドラインビルド


このセクションには、コマンドラインビルド環境でARMおよびx86アーキテクチャを備えたAndroidデバイスをサポートするAPKパッケージを作成する手順が含まれています。
Linuxでコマンドプロンプトまたはターミナルウィンドウを開きます。 Android NDKサンプルフォルダー "hello-jni" [ndk-dir] \ samples \ hello-jniに移動します。 以下の手順に従ってください。
ご注意 上記のセクションにリストされているすべてのツールは、このウィンドウから利用できるはずです。

1.アプリケーションのセットアップ
hello-jniフォルダーで次のコマンドを実行してbuild.xmlファイルを作成します。このファイルは、後でサンプルのビルドに使用されます。
$ android update project --target android-19 --name HelloJni --path. --subprojects 


ご注意 --target android-19は Android 4.4(KITKAT) 互換性あります。

2.アプリケーションワークスペースのクリーニング
次のコマンドを使用して、すべてのISAアーキテクチャのライブラリを含むワークスペース全体をクリアします。
  $ ant clean $ ndk-build V=1 APP_ABI=all clean 


V = 1 :実行されたすべてのコマンドを印刷します。 APP_ABI = all :すべてのターゲットプラットフォームのすべての中間ファイルを強制的にクリーンアップします。 このパラメーターを指定しない場合、ターゲットarmeabiプラットフォームのファイルのみがクリアされます。

3. ARMアーキテクチャ用のバイナリファイルをビルドする
以下のコマンドを使用して、ARMアーキテクチャのアプリケーションバイナリをビルドします。
  $ ndk-build APP_ABI=armeabi-v7a V=1 NDK_TOOLCHAIN=arm-linux-androideabi-4.8 


APP_ABI = armeabi-v7a :ターゲットARMプラットフォームのコンパイル設定。 NDK_TOOLCHAIN = arm-linux-androideabi-4.8 :デフォルトのGNU gcc 4.6の代わりに、gcc 4.8が使用されます。
アプリケーションバイナリファイル(libhello-jni.so)は、 。\ Libs \ armeabi-v7a \ libhello-jni.soに作成されます

4. Intelコンパイラを使用してx86アーキテクチャのバイナリをビルドします
以下のコマンドを使用して、Intelコンパイラーを使用してx86アーキテクチャアプリケーションバイナリをビルドします。
  $ ndk-build APP_ABI=x86 V=1 NDK_TOOLCHAIN=x86-icc NDK_APP.local.cleaned_binaries=true 


APP_ABI = x86 :x86アーキテクチャーのコンパイル設定。 NDK_TOOLCHAIN = x86-icc :Android向けのデフォルトのgcc 4.6コンパイラをIntel C / C ++コンパイラに置き換えます。 NDK_APP.local.cleaned_binaries = true :libs / armeabiディレクトリ内のライブラリの削除をキャンセルします。 以下の注を参照してください。
アプリケーションバイナリファイル(libhello-jni.so)は、 。\ Libs \ x86 \ libhello-jni.soに作成されます

5.アプリケーションパッケージ(APK)の準備
各ターゲットAndroidプラットフォームのすべてのバイナリをビルドした後、 libs \ [targetabi]フォルダーに各ターゲットアーキテクチャに必要なライブラリが含まれていることを確認します。
パッケージの作成を簡素化し、署名を回避するには、次のコマンドを使用してデバッグパッケージを作成します。
  $ ant debug 


その後、新しいHelloJni-debug.zipパッケージが。\ Binフォルダーに表示されます 。 Android SDKに含まれるAPIレベル19以上をサポートするx86またはARMシミュレーターで実行できます。
HelloJni-debug.zipパッケージには、ARM EABI v7aおよびx86の2つのターゲットプラットフォーム用のライブラリが含まれています。

Eclipse IDEでビルドする


1. Eclipseを開き、サンプル[inde-dir] / IDEintegration / NDK / samples / hello-jniをダウンロードします。
メニューから、[ ファイル ] > [新規]> [プロジェクト]> [Android ]を選択します
[ 既存のコードからAndroidプロジェクト ]ボタンをクリックします。
[ ルートディレクトリ ]フィールドで、[ 参照... ]ボタンをクリックし、 [ndk-dir] / samplesフォルダーを選択します。
次に、[ すべて選択解除 ]をクリック目的のプロジェクトのみを選択します: hello-jni
[ プロジェクトをワークスペースにコピー]のチェックを外します
[ 完了 ]ボタンをクリックします。

2.プロジェクトにネイティブコードサポートを追加します。
プロジェクト名を右クリックして、[ Androidツール]> [ネイティブサポートの追加... ]を選択します
[ 完了 ]ボタンをクリックします。
ご注意 この手順の後、コンソールに「 cygpathを起動できません」というエラーメッセージが表示される場合、この手順をスキップしてプロジェクトに影響を与えることはできません。

3.ターゲットプラットフォームごとに個別のビルド構成を作成し、ビルドコマンドを指定します。
プロジェクトを右クリックして、[ プロジェクトプロパティ]-> [C / C ++ビルド]-> [構成の管理]を選択します。
[ 新規...]をクリックして、デフォルトの構成に基づいて新しい構成を追加します。
名前:x86_icc説明:Intel iccコンパイラーを使用するx86ターゲットプラットフォーム用
名前:arm_gcc説明:GNU gccコンパイラーを使用するターゲットARMプラットフォーム用

同じプロジェクトプロパティウィンドウで、Configurationパラメーターをx86_iccに設定します。
Use default build commandチェックボックスをオフにします。
次のテキストを[ ビルドコマンド]フィールドに追加します: ndk-build APP_ABI = x86 NDK_TOOLCHAIN = x86-icc
適用をクリックします。
同じプロジェクトプロパティウィンドウで、設定パラメータをarm_gccに設定します。
Use default build commandチェックボックスをオフにします。
[ ビルドコマンド]フィールドに次のテキストを追加します。ndk-buildAPP_ABI = armeabi-v7a NDK_TOOLCHAIN = arm-linux-androideabi-4.8
[ 適用 ]をクリックし、[ OK ]をクリックします。

4.アプリケーションワークスペース全体のクリーニング
Application.mkファイルが[eclipse-workspace-dir] \ HelloJni \ jniフォルダーに存在する場合、次の行が含まれていないことを確認します
NDK_APP.local.cleaned_binaries = true
プロジェクトを右クリックして、[ ビルド構成]> [すべて消去... ]を選択します。

5. [eclipse-workspace-dir] \ HelloJni \ jniフォルダーに Application.mkファイルが存在しない場合は作成し次の行が含まれていることを確認します。
NDK_APP.local.cleaned_binaries = true

6. gccを使用してターゲットARM *アーキテクチャ用に、Intelコンパイラを使用してターゲットx86アーキテクチャ用にバイナリをビルドします。
プロジェクトを右クリックし、「 ビルド構成」>「選択したビルド...」を選択します
arm_gccおよびx86_iccを選択します。
OKをクリックします。
次のアドレスで出力バイナリを確認してください。
[eclipse-workspace-dir] \ HelloJni \ libs \ armeabi-v7a \ libhello-jni.so
[eclipse-workspace-dir] \ HelloJni \ libs \ x86 \ libhello-jni.so

7.署名されていないアプリケーションパッケージの作成
プロジェクトを右クリックして、[ Androidツール]> [署名されていないアプリケーションパッケージをエクスポート... ]を選択します

バイナリクリーンアップを実行しないことに注意してください。\ Libs \ [targetabi]


以前にコンパイルされたライブラリの削除を無効にするNDK_APP.local.cleaned_binaries = trueパラメーターは、NDKの将来のバージョンでは機能しない可能性があります。 インストールされたバイナリのアンインストールアクションを無効にする方法については、 [ndk-dir] /build/core/setup-app.mkを参照してください。

その他の関連記事とリソース




Android開発者向けのインテルのツールの詳細については、Android向けインテル開発者ゾーンをご覧ください。

Source: https://habr.com/ru/post/J252883/


All Articles