Hello-jni示例在Android Studio 2.0预览中不起作用

时间:2015-12-15 20:28:39

标签: android android-studio android-ndk java-native-interface

我正在尝试实施hello-jni sample 进入我的项目。我有Gradle 2.8和'com.android.tools.build:gradle-experimental:0.4.0'并使用Android Studio 2.0 Preview 3b

这是我的build.gradle

apply plugin: 'com.android.model.application'
model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.2"
        defaultConfig.with {
            applicationId = "lala.lala"
            minSdkVersion.apiLevel = 16
            targetSdkVersion.apiLevel = 23
            versionCode = 1
            versionName = "1.0"
        }
    }
    /*
    * native build settings
    */
    android.ndk {
        moduleName = "hello-jni"


        //  cppFlags.add("-fno-rtti")
     //    cppFlags.add("-fno-exceptions")
     //   ldLibs.addAll(["android", "log"])
      //  stl       = "system"

    }

    android.productFlavors {
        // for detailed abiFilter descriptions, refer to "Supported ABIs" @
        // https://developer.android.com/ndk/guides/abis.html#sa
        create("arm") {
            ndk.abiFilters.add("armeabi")
        }
        create("arm7") {
            ndk.abiFilters.add("armeabi-v7a")
        }
        create("arm8") {
            ndk.abiFilters.add("arm64-v8a")
        }
        create("x86") {
            ndk.abiFilters.add("x86")
        }
        create("x86-64") {
            ndk.abiFilters.add("x86_64")
        }
        create("mips") {
            ndk.abiFilters.add("mips")
        }
        create("mips-64") {
            ndk.abiFilters.add("mips64")
        }
        // To include all cpu architectures, leaves abiFilters empty
        create("all")
    }
    android.buildTypes {
        release {
            minifyEnabled = false
            //proguardFiles.add(file('proguard-rules.txt'))
        }
    }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.android.support:cardview-v7:23.1.1'
    compile 'com.android.support:recyclerview-v7:23.1.1'
    compile 'com.google.android.gms:play-services-ads:8.3.0'
    compile 'com.google.android.gms:play-services-analytics:8.3.0'
    compile 'com.google.android.gms:play-services-appindexing:8.3.0'
}

我在JNI文件夹hello-jni.h中创建了:

enter image description here

在我的代码的某些部分,我导入了这个:

static {
    System.loadLibrary("hello-jni");
}
public static native int testMethod();

自动完成创建hello-jni.c

#include "hello-jni.h"

JNIEXPORT jintJNICALL
Java_lala_lala_HomeScreen_testMethod(JNIEnv
*env,
jclass type
)
{
// TODO
}

标题文件hello-jni.h

//
// Created by Filip on 15.12.2015..
//

#ifndef PHOTO_HELLO_JNI_H
#define PHOTO_HELLO_JNI_H

#endif //PHOTO_HELLO_JNI_H

但它不起作用。它是全红的:

enter image description here

有什么问题?怎么解决?

2 个答案:

答案 0 :(得分:1)

要使示例正常工作,您可以尝试以下步骤:

  1. > library(PKI) Loading required package: base64enc > PKI::rawToHex Error: 'rawToHex' is not an exported object from 'namespace:PKI' > PKI:::rawToHex Error in get(name, envir = asNamespace(pkg), inherits = FALSE) : object 'rawToHex' not found 方法jni的签名与您的包名Java_filsoft_photo_HomeScreen_testMethod(...)不匹配。对于要调用的方法,使其签名与包名一致。
  2. 尝试按以下方式编辑lala.lala

    hello-jni.c
  3. 关于红色突出显示,从#include <jni.h> #include "hello-jni.h" jint Java_lala_lala_HomeScreen_testMethod( JNIEnv* env, jclass type ) { } 开始,Android Studio 2.0 Preview 3b功能尚未得到官方支持,而且据我所知,这就是它的原因。禁用NDK插件(如果已安装)

    Android NDK support&gt; Settings&gt;取消选中Plugins&gt;重新启动Android NDK support

答案 1 :(得分:0)

这是Android工作室的问题,但仅限于Windows:Issue 195483
您可以降级到Android studio 1.5.1,gradle 2.8,experimental wrapper 0.4.0 我尝试使用包装器0.6.0-beta5和0.6.0-beta6的Android Studio 2.0 beta 6,但仍然无效。