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.プロジェクトのルートディレクトリでコマンドを実行します ndにrまたはまたはt/ndに-bu私ld-Cにpp 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は比較的簡単です