2016-10-16 8 views
7

Chcę zintegrować NDK z Androidem, ale mam do czynienia z obsługą NDK, jest to funkcja eksperymentalna, a przypadki użycia nie są jeszcze obsługiwane. Pobierałem NDK za pomocą menedżera SDK, a NDK jest wyblakły. C: \ Users \ The \ AppData \ Local \ Android \ Sdk \ ndk-bundle. Stworzyłem także klasę Javy NativePanorama dla interakcji Java i C++. Oto Kod klasy NativePanorama.javaObsługa NDK to eksperymentalne funkcje, a wszystkie przypadki użycia nie są jeszcze obsługiwane w systemie Android Studio?

 public class NativePanorama { 



    public native static void processPanorama(long[] imageAddressArray, 
                long outputAddress); 
     { 

     } 
} 

kiedyś polecenia javah w terminalu, aby utworzyć odpowiedni nagłówek C++ za sposób klasy Java NativePanorama processPanorama . Oto utworzony plik nagłówkowy com_example_the_myapplication_NativePanorama.h C++.

/* DO NOT EDIT THIS FILE - it is machine generated */ 
#include <jni.h> 

    /* Header for class com_example_the_myapplication_NativePanorama */ 

    #ifndef _Included_com_example_the_myapplication_NativePanorama 
    #define _Included_com_example_the_myapplication_NativePanorama 
    #ifdef __cplusplus 
    extern "C" { 
    #endif 
    /* 
    * Class:  com_example_the_myapplication_NativePanorama 
    * Method: processPanorama 
    * Signature: ([JJ)V 
    */ 
    JNIEXPORT void JNICALL Java_com_example_the_myapplication_NativePanorama_processPanorama 
    (JNIEnv *, jclass, jlongArray, jlong); 

    #ifdef __cplusplus 
    } 
    #endif 
    #endif 

Tutaj jest również C++ plik źródłowy com_example_the_myapplication_NativePanorama.cpp.

#include "com_example_panorama_NativePanorama.h" 
JNIEXPORT void JNICALL 
Java_com_example_panorama_NativePanorama_processPanorama 
(JNIEnv * env, jclass clazz, jlongArray imageAddressArray, jlong 
outputAddress){ 
} 

Może być błąd jest w pliku build.gradle tutaj jest moja build.gradle (app) złożyć

import org.apache.tools.ant.taskdefs.condition.Os 
apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.3" 

    defaultConfig { 
     applicationId "com.example.the.myapplication" 
     minSdkVersion 19 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    // begin NDK OPENCV 
    sourceSets.main { 
     jni.srcDirs = [] //disable automatic ndk-build call 
    } 
    task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') { 
     def rootDir = project.rootDir 
     def localProperties = new File(rootDir, "local.properties") 
     Properties properties = new Properties() 
     localProperties.withInputStream { instr -> 
      properties.load(instr) 
     } 
     def ndkDir = properties.getProperty('ndk.dir') 
     if (Os.isFamily(Os.FAMILY_WINDOWS)) { 
      commandLine "$ndkDir\\ndk-build.cmd", 
        'NDK_PROJECT_PATH=build/intermediates/ndk', 
        'NDK_LIBS_OUT=src/main/jniLibs', 
        'APP_BUILD_SCRIPT=src/main/jni/Android.mk', 
        'NDK_APPLICATION_MK=src/main/jni/Application.mk' 
     } else { 
      commandLine "$ndkDir/ndk-build", 
        'NDK_PROJECT_PATH=build/intermediates/ndk', 
        'NDK_LIBS_OUT=src/main/jniLibs', 
        'APP_BUILD_SCRIPT=src/main/jni/Android.mk', 
        'NDK_APPLICATION_MK=src/main/jni/Application.mk' 
     } 
    } 
    tasks.withType(JavaCompile) { 
     compileTask -> compileTask.dependsOn ndkBuild 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    compile project(":opencv-java") 
} 

Istnieje również natywną Raporty deklaracji metody w Javie, gdzie nie odpowiada funkcja jest JNI znaleziono w błędzie projektu w klasie NativePanorama.java.

Jak mogę rozwiązać ten problem?

+0

Nie widzisz, gdzie możesz nam powiedzieć, jakie błędy otrzymujesz? A której wersji Androida Studio używasz? –

+0

Występują dwa błędy, jednym z nich jest obsługa NDK, jest to funkcja eksperymentalna, a wszystkie przypadki użycia nie są jeszcze obsługiwane w plikach .cpp i .h, a druga to deklaracja natywnej metody Report w java, gdzie nie znaleziono odpowiadającej jej funkcji w projekcie w klasie NativePanorama.java. Używam Androida Studio w wersji 2.1.3 – Yirga

+1

Myślę, że powinieneś zaktualizować do wersji 2.2.x http://tools.android.com/recent Możesz zainstalować równolegle wersje stabilne i beta, jeśli potrzebujesz. 2.2 jest reklamowany jako obsługujący NDK budować. –

Odpowiedz

7

Oto rozwiązanie:

Aktualizacja Android Studio albo do najnowszej wersji lub najnowszej publicznej wersji wstępnej.

Android Studio 2.2.1 jest obecnie najnowszą wersją i ma odpowiednie wbudowane wsparcie dla C++. Nadal nad nim pracuje, a niektóre rzeczy mogą nadal nie być obsługiwane, ale używanie C++ zdecydowanie działa lepiej w nowszej wersji. Oczywiście również upewnij się, że Twój zestaw SDK systemu Android jest aktualny.

Powiązane problemy