java - NDK 支持是一项实验性功能,所有用例在 Android Studio 中尚不支持错误?

标签 java android c++ android-studio android-ndk

我想将 NDK 集成到 Android Studio 中,但我面临 NDK 支持是一项实验性功能,并且 用例尚不支持错误。我已经使用 SDK 管理器下载了 NDK 并且 NDK 已放置 C:\Users\The\AppData\Local\Android\Sdk\ndk-bundle。我还为 Java 和 C++ 交互创建了 NativePanorama java 类。这是 NativePanorama.java 类的代码

     public class NativePanorama {



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

        }
}

我在终端中使用javah命令为processPanorama创建了对应的C++头文件 NativePanorama java 类中的方法。这是创建的 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

这里还有 com_example_the_myapplication_NativePanorama.cpp c++​​ 源文件。

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

可能是错误在build.gradle文件这里是我的build.gradle(app)文件

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

还有Reports native method declaration in java where no corresponding jni function in the project error in the NativePanorama.java class.

我该如何解决这些问题?

最佳答案

解决方法如下:

将您的 Android Studio 更新到最新版本或最新的公开预发布版本。

Android Studio 2.2.1 目前是最新版本,它内置了适当的 C++ 支持。他们仍在努力,有些东西可能仍然不受支持,但使用 C++ 在新版本上肯定会更好地工作。当然,还要确保您的 Android SDK 保持最新。

关于java - NDK 支持是一项实验性功能,所有用例在 Android Studio 中尚不支持错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40068491/

相关文章:

c++ - main.exe 已停止在代码块中工作

java - 在 Java AWT 框架上托管 ActiveX 控件?

java - 无法解析方法 inflate(android.context.Context)

android - 对话框android中的EditText

android - Socket EADDRINUSE(地址已被使用)

c++ - 这是迭代 2 个不同大小的单链表和一个静态数组的最佳方法吗?

java - 最长回文程序

java - 插页式广告未展示

android - 如何动态更改 MenuItem 的可见性?

c++ - 如何使用Qt编程获得圆柱效果(2D)进度条?