2016-10-16 49 views
7

NDK'yı Android stüdyosuna entegre etmek istiyorum ancak NDK desteği ile karşı karşıya olduğum bir deneysel özellik ve kullanım durumları henüz desteklenmiyor. SDK yöneticisini kullanarak NDK'yı indirdim ve NDK C: \ Users \ palced \ AppData \ Local \ Android \ SDK \ ndk-demeti. Java ve C++ etkileşimi için NativePanorama java sınıfını da oluşturdum. Burada NativePanorama Java sınıfı içine processPanorama yöntem gelen C++ başlığını yaratmak için, terminal olarak javah komutu kullanılır NativePanorama.java sınıfıNDK desteği, deneysel bir özelliktir ve Android Studio'da tüm kullanım durumları henüz desteklenmeyen bir hata değildir.

 public class NativePanorama { 



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

     } 
} 

kodudur. İşte yaratılan com_example_the_myapplication_NativePanorama.h C++ başlık dosyası. İşte

/* 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 

da com_example_the_myapplication_NativePanorama.cpp C++ kaynak dosyasıdır.

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

hata benim build.gradle (uygulama) dosyası olduğunu burada build.gradle dosyasında olduğunu olabilir

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") 
} 

da hiçbir karşılık gelen jni fonksiyonudur java yerli yöntem beyanı var Raporları edilir NativePanorama.java sınıfında proje hatası bulundu.

Bu sorunu nasıl düzeltebilirim? ya en son sürümü veya son kamu yayın öncesi sürümüne

Güncelleme Android Studio:

+0

Bize hangi hataları aldığınızı anlatamıyor musunuz? Ve hangi Android Studio sürümü üzerindesiniz? –

+0

NDK desteğinin bir deneme niteliğindeki iki hatası vardır ve tüm kullanım durumları henüz .cpp ve .h dosyalarında desteklenmez ve ikincisi ise projede karşılık gelen bir jni işlevinin bulunmadığı java'daki yerel yöntem bildirimidir. NativePanorama.java sınıfında. Android Studio sürüm 2.1.3 kullanıyorum – Yirga

+1

Ben 2.2.x için güncelleştirmek gerektiğini düşünüyorum http://tools.android.com/recent Paralel yüklemek istikrarlı, ve beta sürümleri gerekiyorsa, ihtiyacınız varsa 2,2 NDK destekli olarak ilan edilir inşa etmek. –

cevap

7

İşte çözüm.

Android Studio 2.2.1, şu anda en yeni sürüme sahip ve uygun C++ desteğine sahip. Bunlar hala üzerinde çalışıyor ve bazı şeyler hala desteklenmiyor olabilir, ancak C++ kullanımı kesinlikle daha yeni bir sürümde daha iyi çalışıyor. Tabii ki de Android SDK'nızı güncel tuttuğunuzdan emin olun.