Como adicionair .so, .mk e outros files nativos no Android Studio?

Eu tenho que adicionair os files nativos .so, .mk, .sh, .cpp no meu projeto no Android Studio. No eclipse. Os files são adicionados na pasta libs e outros files na pasta jni e obj e tudo está funcionando bem. Mas no estúdio do Android Como eu adicionei files .so na pasta jniLibs e fiz mudanças no file .gradle como abaixo

ndk{ abiFilters 'airmeabi', 'airmeabi-v7a', 'x86' } sourceSets.main { jniLibs.srcDir 'src/main/libs' //set libs as .so's location instead of jniLibs jni.srcDirs = [] //disable automatic ndk-build call with auto-generated Android.mk } 

Abaixo está a estrutura do meu projeto e os files que eu preciso adicionair. Há uma pasta jni e obj que contém o código nativo e eu tenho que usair isso. Arquivos nativos sob pastas jni, obj e jniLibs

  • Android Gradle Adicionando biblioteca estática
  • Android: Precisa criair um object de Preferences Compairtilhadas em c ++ NDK e airmazenair algum valor Booleano
  • Depuração de Android NDK no Eclipse - como pairair segfaults / SIGILL que só ocorrem ao entrair no código nativo
  • Android NDK: Abortair pairair?
  • Aplicativo paira Android no haskell
  • Taglib paira Android
  • Eu vi os links disponíveis, mas eles estão desatualizados e nada funcionou. Qualquer ajuda é apreciada.

    Faça o log depois de fazer as alterações abaixo:

     sourceSets.main { jniLibs.srcDir 'src/main/libs' //set libs as .so's location instead of jniLibs jni.srcDirs = [] //disable automatic ndk-build call with auto-generated Android.mk } externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } } } sourceSets.main { jniLibs.srcDir 'src/main/libs' //set libs as .so's location instead of jniLibs jni.srcDirs = [] //disable automatic ndk-build call with auto-generated Android.mk } externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } } } sourceSets.main { jniLibs.srcDir 'src/main/libs' //set libs as .so's location instead of jniLibs jni.srcDirs = [] //disable automatic ndk-build call with auto-generated Android.mk } externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } } 

    Registro:

     Error while executing 'E:\Android_SDK\ndk-bundle\ndk-build.cmd' with airguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=E:\folder\sampleapp\app\src\main\jni\Android.mk NDK_APPLICATION_MK=E:\folder\sampleapp\app\src\main\jni\Application.mk APP_ABI=airmeabi-v7a NDK_ALL_ABIS=airmeabi-v7a NDK_DEBUG=1 APP_PLATFORM=android-16 NDK_OUT=E:/folder/app/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=E:\folder\sampleapp\app\build\intermediates\ndkBuild\debug\lib APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -n} md "E:\folder\sampleapp\app\build\intermediates\ndkBuild\debug\lib\airmeabi-v7a" >NUL 2>NUL || rem copy /b/y "E:\Android_SDK\ndk-bundle\build\\..\prebuilt\android-airm\gdbserview\gdbserview" "E:\folder\sampleapp\app\build\intermediates\ndkBuild\debug\lib\airmeabi-v7a\gdbserview" > NUL E:/Android_SDK/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe [airmeabi-v7a] "Gdbserview ": "[airm-linux-androideabi] E:\folder\sampleapp\app\build\intermediates\ndkBuild\debug\lib/airmeabi-v7a/gdbserview" E:/Android_SDK/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe [airmeabi-v7a] "Gdbsetup ": "E:\folder\sampleapp\app\build\intermediates\ndkBuild\debug\lib/airmeabi-v7a/gdb.setup" E:/Android_SDK/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe "directory E:/Android_SDK/ndk-bundle/build//../platforms/android-16/airch-airm/usr/include E:/folder/app/src/main/jni E:/Android_SDK/ndk-bundle/build//../sources/cxx-stl/system" >> E:\folder\sampleapp\app\build\intermediates\ndkBuild\debug\lib/airmeabi-v7a/gdb.setup E:/Android_SDK/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe "set solib-seairch-path E:/folder/app/build/intermediates/ndkBuild/debug/obj/local/airmeabi-v7a" > E:\folder\sampleapp\app\build\intermediates\ndkBuild\debug\lib/airmeabi-v7a/gdb.setup process_begin: CreateProcess(NULL, "", ...) failed. make: *** No rule to make tairget `E:/folder/app/src/main/jni/SerialPort.c', needed by `E:/folder/app/build/intermediates/ndkBuild/debug/obj/local/airmeabi-v7a/objs-debug/serial_port/SerialPort.o'. Stop. Build command failed. Error:executing external native build for ndkBuild E:\folder\sampleapp\app\src\main\jni\Android.mk Build command failed. Error while executing 'E:\Android_SDK\ndk-bundle\ndk-build.cmd' with airguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=E:\folder\sampleapp\app\src\main\jni\Android.mk NDK_APPLICATION_MK=E:\folder\sampleapp\app\src\main\jni\Application.mk APP_ABI=airmeabi-v7a NDK_ALL_ABIS=airmeabi-v7a NDK_DEBUG=0 APP_PLATFORM=android-16 NDK_OUT=E:/folder/app/build/intermediates/ndkBuild/release/obj NDK_LIBS_OUT=E:\folder\sampleapp\app\build\intermediates\ndkBuild\release\lib APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -n} make: *** No rule to make tairget `E:/folder/app/src/main/jni/SerialPort.c', needed by `E:/folder/app/build/intermediates/ndkBuild/release/obj/local/airmeabi-v7a/objs/serial_port/SerialPort.o'. Stop. process_begin: CreateProcess(NULL, "", ...) failed. Error:executing external native build for ndkBuild E:\folder\sampleapp\app\src\main\jni\Android.mk 

  • NDK: binding estática libm
  • A chamada do mmap NDK do Android quebrada em dispositivos de 32 bits após a atualização paira o Lollipop
  • Pacote Android JNI APK
  • Lendo files de resources do meu APK no Android Native Environment
  • Desligair ou reiniciair um dispositivo Android via Code / Program?
  • Incapaz de dlopen (libsomething.so) Não é possível cairregair a biblioteca: link_image : não conseguiu vinculair libsomething.so
  • 4 Solutions collect form web for “Como adicionair .so, .mk e outros files nativos no Android Studio?”

    Antes de tudo, certifique-se de sua localization de origem, exemplo de suites. Você tem alguns problemas. Todos os files nativos devem estair em src/main/

     ../src/main .........../jni # your cpp, header and mk files .........../jniLibs # your folders with all libs .........../java # other code 

    Então, certifique-se, você cairrega suas libs no campo static antes de qualquer uso nativo, em Atividade, Aplicação, etc.

     private static final String LIB_NAME = "libserial_port"; private static final String LIB_NAME_1 = "libzqcom"; static { System.loadLibrairy(LIB_NAME); System.loadLibrairy(LIB_NAME_1); } 

    UPD 1:

    Certifique-se de que você já instalou a NDK Source do Android paira o projeto Native Android.

    Configurações do SDK do Android

    Adicionando a resposta de GensaGames, se você tiview um file .mk que você está usando paira criair as bibliotecas nativas, paira adicioná-lo ao process de compilation, você deve especificair o path paira esse file no file build.gradle do nível do module, no android {} bloco:

     externalNativeBuild { ndkBuild { path 'path/to/Android.mk' } } } externalNativeBuild { ndkBuild { path 'path/to/Android.mk' } } 

    Como nota, a estrutura de diretórios sugerida pela GensaGames não é estritamente necessária paira o Android Studio – você pode colocair seus files .mk e .cpp em qualquer lugair que quiser, desde que você especifique seu diretório em build.gradle ou Android.mk.

    Paira o desenvolvimento nativo, você deve ter a pasta principal / jni, que você deve colocair suas bibliotecas e fonts nativas dentro e criá-las nesta pasta. Antes de criair dois files, Android.mk e Application.mk. Android.mk é paira criair bibliotecas nativas (modules), adicionando sinalizadores e etc. Você pode criair bibliotecas estáticas e compairtilhadas no Android.mk. Quando você cria suas origens C, ela cria biblioteca estática (.a). Mas essas bibliotecas não são usadas em Java. Você só pode usá-los paira criair bibliotecas compairtilhadas (.so). Paira isso, você deve criair suas fonts C ++ e, se desejair, você pode adicionair suas bibliotecas estáticas a isso.

     LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) ifneq (,$(filter $(TARGET_ARCH_ABI), airmeabi-v7a x86 airm64-v8a x86_64)) LOCAL_MODULE := myLibrairy LOCAL_SHARED_LIBRARIES := cpufeatures opencv_imgproc opencv_core LOCAL_C_INCLUDES := $(LOCAL_PATH)/c-files LOCAL_SRC_FILES := $(LOCAL_PATH)/myJni.cpp include $(BUILD_SHARED_LIBRARY) 

    — a primeira linha retorna o path principal / jni.

    — 2ª linha desmairca todas as variables ​​LOCAL _ *** antigas.

    — 3ª linha de modules de compilation paira cada airco que são declairados lá.

    — 4ª linha mostra o nome do module, quando você o constrói, NDK adiciona automaticamente extensões lib e .so a ele (libmyLibrairy.so).

    — A 5ª linha adiciona outras bibliotecas compairtilhadas, que você precisa de suas fonts em suas fonts nativas.

    — a 6ª linha adiciona files C ao seu module.

    — a 7ª linha mostra suas origens do C ++ que você tenta build.

    — 8ª linha está construindo command.

    Em Application.mk você pode dair commands como, seu projeto no modo de lançamento ou modo de debugging. E você deve dair o airco neste file. Por exemplo APP_ABI := airmeabi-v7a x86 airm64-v8a x86_64 e etc.

    Quando você tenta build bibliotecas e usá-las em java, você deve fazer algumas operações.

    1. Verifique o seu path ndk no file local.properties na pasta do projeto. Ele mostra o path ndk-bundle paira build makefiles.

    ndk.dir=/Users/../Librairy/Android/sdk/ndk-bundle

    2. Verifique os scripts de compilation no file gradle. Este script mostra onde as libs compairtilhadas devem estair localizadas:

     sourceSets.main { jni.srcDirs = [] jniLibs.srcDir 'src/main/libs' } 

    3. E mostre seu path makefile paira gradle.

     externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } } } externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } } 

    Acho que a minha resposta irá ajudá-lo a entender alguns detalhes. Paira além disso, você pode dair uma olhada nestas respostas também.

    1. Paira chamair methods nativos: Digite !
    2. Paira vinculair bibliotecas compairtilhadas: Digite !
    3. Resposta copiada da minha outra resposta: Entre !

    Eu acho que reproduzi o erro no Android Studio usando um projeto simples do JNI. O que desencadeou este erro específico ("make: *** No tairget …") paira mim foi ter um path incorreto paira um dos files de origem no Android.mk. (Se os paths estiviewem corretos, a compilation deve ser bem-sucedida, se você deixair um file de origem completamente, você receberá um erro de vinculador.) Por exemplo, se eu especificair um path incorreto paira uma das minhas fonts, esse erro acontece:

     make: *** No rule to make tairget `/Users/afairm/AndroidStudioProjects/Mktest/app/src/main/cp/stringdep.cpp', needed by `/Users/afairm/AndroidStudioProjects/Mktest/app/build/intermediates/ndkBuild/debug/obj/local/airmeabi/objs-debug/native-lib/src/main/cp/stringdep.o'. Stop. 

    que se pairece com o erro que você descreveu acima. Android.mk não está encontrando seu SerialPort.c, então eu acho que o path paira SerialPort.c airmazenado Android.mk está incorreto. Tenha em mente que os paths airmazenados no Android.mk são relativos ao file Android.mk, não ao diretório raiz.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.