Integrované NDK pro Android Studio 2.0

Android Studio 2 0 Integrated Ndk



Předmluva

Nyní je vývoj ndk stále pohodlnější, otevřete starý počítač AS2.0, znovu získáte nové pochopení metody kompilace ndk-build, předchozí porozumění jni, libs, jniLibs těchto adresářů je trochu chaotické.

Vývojové prostředí:



  • Windows 7
  • android-ndk-r14b
  • Android Studio 2.0

krok

One.local.properties přidá cestu ndk
ndk.dir=D:\download\android-ndk-r14b

Pokud není přidán, nahlásí se následující výzva



Soubor two.gradle.properties, přidejte
android.useDeprecatedNdk=true //Low version plugin

Pokud není přidán, nahlásí se následující výzva



Chyba: (27, 1) Při hodnocení projektu „: aplikace“ došlo k problému.
Chyba: Integrace NDK je v aktuálním pluginu ukončena. Zvažte vyzkoušení nového experimentálního pluginu. Podrobnosti viz http://tools.android.com/tech-docs/new-build-system/gradle-experimental . Nastavte „android.useDeprecatedNdk = true“ v gradle.properties a pokračujte v používání aktuální integrace NDK.

Tři. Vytvořte adresář jni

Nový adresář src / main / jni

Four.ndk-build kompilace
  • Automatická kompilace (není třeba ručně spouštět příkaz ndk-build)
  • Ruční kompilace (je třeba ručně spustit příkaz ndk-build)

Automatická kompilace



Android studio automaticky generuje soubor Android.mk podle možnosti ndk

V souboru build.gradle

1. Určete adresář jni, jni.srcDirs je umístění zdrojového kódu

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. Nakonfigurujte volbu 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' } }

Spusťte program a vygenerujte mezilehlé soubory (app build intermediates ndk), takže takto zkompilovaná knihovna odkazů bude automaticky zabalena do adresáře app / libs apk

Ruční kompilace
Ručně napište soubor Android.mk a zkompilujte jej pomocí příkazu ndk-build

1. V souboru build.gradle zakažte automatickou kompilaci 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. V adresáři jni přidejte soubory Android.mk a Application.mk
Android.mk se používá k nastavení názvu souboru knihovny, cesty ke zdrojovému kódu a souboru Application.mk ke konfiguraci kompilované verze

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. Spusťte příkaz v kořenovém adresáři projektu ndkrnebonebot/ndk-build-Cnastrstr srchlavní jni {ndk_root} je cesta ndk, pokud ndk je D: download android-ndk-r14b, příkaz je

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

Výstup zprostředkujících souborů pomocí ndk-build je v app src main libs

Ruční kompilace je užitečná pro pochopení procesu kompilace GNU make, ale musíte věnovat pozornost změně adresáře jniLibs na src / main / libs tak, aby byla knihovna so zabalena do apk. Důvodem je, že jniLibs.srcDir je výchozí adresář src / main / jniLibs, ale neexistuje žádný adresář src / main / jniLibs, pouze src / main / libs. . Samozřejmě můžete také vytvořit adresář src / main / jniLibs a zkopírovat do něj soubor so. Jinak běh programu nenajde knihovnu so

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

Polomanuální kompilace
Pro manuální optimalizaci kompilace použijte gradle task k provedení ndk-build
Vytvořte nový úkol v souboru 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' }

Poznámky Běžné příkazy 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

Současné studio pro Android již dávno opustilo tuto metodu samovolného házení a teprve potom bude existovat nádherná konfigurace, jako je android.useDeprecatedNdk = true. Nová integrace Android Studio ndk je relativně snadná