Android Studio2.0統合NDK



Android Studio 2 0 Integrated Ndk



序文

これで、ndkの開発がますます便利になり、古いコンピューターのAS2.0を開いて、ndk-buildのコンパイル方法を新たに理解しました。以前は、jni、libs、jniLibsを理解していましたが、これらのディレクトリは少し面倒です。

開発環境:



  • Windows 7
  • android-ndk-r14b
  • アンドロイドスタジオ2.0

ステップ

One.local.propertiesはndkパスを追加します
ndk.dir=D:\download\android-ndk-r14b

追加しない場合、次のプロンプトが報告されます

Two.gradle.propertiesファイル、追加
android.useDeprecatedNdk=true //Low version plugin

追加しない場合、次のプロンプトが報告されます



エラー:(27、1)プロジェクト「:app」の評価で問題が発生しました。
エラー:NDK統合は現在のプラグインでは非推奨です。新しい実験的なプラグインを試すことを検討してください。詳細については、を参照してください。 http://tools.android.com/tech-docs/new-build-system/gradle-experimental 。現在のNDK統合を引き続き使用するには、gradle.propertiesで「android.useDeprecatedNdk = true」を設定します。

三。 jniディレクトリを作成します

新しいディレクトリsrc / main / jni

Four.ndk-ビルドコンパイル
  • 自動コンパイル(ndk-buildコマンドを手動で実行する必要はありません)
  • 手動コンパイル(ndk-buildコマンドを手動で実行する必要があります)

自動コンパイル



android studioは、ndkオプションに従ってAndroid.mkファイルを自動的に生成します

build.gradleファイル内

1.jniディレクトリを指定します。jni.srcDirsはソースコードの場所です。

sourceSets { main { println('---> jni default directory $jni') jni.srcDirs = ['src/main/jni'] //Compile the jni directory and automatically generate mk files according to the ndk configuration of defaultConfig. The intermediate files are in appuildintermediates dk } }

2.ndkオプションを構成します

defaultConfig { ndk { //The name of the lib, corresponding to the LOCAL_MODULE of the Android.mk file moduleName 'JniTest' //cpu type abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'mips', 'arm64-v8a', 'x86_64', 'mips64' } }

プログラムを実行して中間ファイル(app build internaltes ndk)を生成すると、この方法でコンパイルされたリンクライブラリがapkのapp / libsディレクトリに自動的にパッケージ化されます。

手動コンパイル
Android.mkファイルを手動で記述し、ndk-buildコマンドを使用してコンパイルします

1. build.gradleファイルで、ndkの自動コンパイルを禁止します

sourceSets { main { println('---> jni default directory $jni')//Once ndk is added, ndk will be automatically compiled by default src/main/jni jni.srcDirs = []//disable automatic ndk-build call Disable automatic compilation src/main/jni directory println('---> jni new directory $jni') } }

2. jniディレクトリに、Android.mkファイルとApplication.mkファイルを追加します
Android.mkは、ライブラリファイルの名前、ソースコードパス、およびApplication.mkファイルを設定して、コンパイルされたバージョンを構成するために使用されます。

Android.mk

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := test #Library name LOCAL_LDFLAGS := -Wl,--build-id LOCAL_SRC_FILES :=main.cpp LOCAL_C_INCLUDES += /app/src/main/jni LOCAL_C_INCLUDES += /app/src/debug/jni include $(BUILD_SHARED_LIBRARY)

Application.mk

#APP_PLATFORM (minimum is android-21 for 64bit support) requires ndk11 and above to compile 64bit #APP_ABI := armeabi armeabi-v7a mips x86 arm64-v8a x86_64 mips64 #APP_PLATFORM := android-21 #Compile version APP_ABI := all #Compiled supported abi corresponds to abiFilters of gradle's ndk option

3.プロジェクトのルートディレクトリでコマンドを実行します ndrまたはまたはt/nd-buld-Cpp srcメイン jni {ndk_root}はndkパスです。ndkがD: download android-ndk-r14bの場合、コマンドは次のようになります。

D:downloadandroid-ndk-r14b dk-build -C appsrcmainjni

ndk-buildによって出力される中間ファイルはapp src main libsにあります

手動コンパイルはGNUmakeのコンパイルプロセスを理解するのに役立ちますが、soライブラリがapkにパッケージ化されるように、jniLibsのディレクトリをsrc / main / libsに変更することに注意する必要があります。その理由は、jniLibs.srcDirがデフォルトでsrc / main / jniLibsディレクトリに設定されているためですが、src / main / jniLibsディレクトリはなく、src / main / libsのみです。 。もちろん、src / main / jniLibsディレクトリを作成して、soファイルをそのディレクトリにコピーすることもできます。そうしないと、プログラムを実行してもsoライブラリが見つかりません

jniLibs.srcDirs = ['src/main/libs']//Depend on libs directory

半手動編集
手動でコンパイルを最適化するには、gradleタスクを使用してndk-buildを実行します
build.gradleファイルに新しいタスクを作成します

//Built-in mk file task automatic compilation task buildNative(type: Exec) { def ndkDir = android.ndkDirectory println('---> ndk dir: ${ndkDir}') println('---> jni file dir: ${file('src/main/jni').absolutePath}') commandLine '$ndkDir/ndk-build.cmd',//It is equivalent to opening cmd and entering the command ndk-build.cmd -C src/main/jni '-C', file('src/main/jni').absolutePath, // Generate so based on jni's Android.mk, under src/libs '-j', Runtime.runtime.availableProcessors(),//-j parameter, execute the build command in parallel 'all', 'NDK_DEBUG=1' } tasks.withType(JavaCompile) { //Execute the buildNative task when the project is compiled compileTask -> compileTask.dependsOn 'buildNative' }

備考ndk-buildの一般的なコマンド

ndk-build Compile ndk-build -C <project path> Specify the project directory ndk-build clean clean binary files ndk-build NDK_DEBUG=1 Binary files compiled into a debuggable version ndk-build NDK_DEBUG=0 Compile to release version ndk-build NDK_LOG=1 Print out internal NDK log information (used to debug NDK itself) ndk-build NDK_APP_APPLICATION_MK=<file path> Use the path specified here to find Application.mk file

現在のAndroidStudioは、このセルフトス方式を長い間放棄してきました。その場合にのみ、android.useDeprecatedNdk = trueのようなすばらしい構成が作成されます。新しいAndroidStudio統合NDKは比較的簡単です