2015-12-15 54 views
5

我正試圖在我的項目中實現hello-jni sample 。我有Gradle 2.8和'com.android.tools.build:gradle-experimental:0.4.0'和使用Android Studio 2.0 Preview 3bHello-jni示例在Android Studio 2.0 Preview中不起作用

這是我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(); 

並通過自動com pletion創建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

是什麼問題呢?如何解決它?

回答

0

這是在Android Studio中的問題,但只是在Windows上:Issue 195483
您可以降級到Android 1.5.1工作室,gradle 2.8,experimental wrapper 0.4.0
我試過Android Studio 2.0 beta 6,包裝0.6.0-beta5和0.6.0-beta6,但仍然無法正常工作。

1

爲了使樣本的工作,你可以嘗試以下步驟:

  1. jni方法Java_filsoft_photo_HomeScreen_testMethod(...)不相匹配,是lala.lala你的包名的簽名。對於要調用的方法,使其簽名與包名稱一致。
  2. 嘗試編輯hello-jni.c如下:

    #include <jni.h> 
    #include "hello-jni.h" 
    
    jint Java_lala_lala_HomeScreen_testMethod(JNIEnv* env, jclass type) 
    { 
    } 
    
  3. 關於紅色highlightings,作爲Android Studio 2.0 Preview 3bNDK功能尚未正式支持,並給我最好的猜測,這是它的原因。禁用Android NDK support插件(如果已安裝)

    Settings>Plugins>取消Android NDK support>重啓Android Studio

+0

哦,這不是問題,我把佔位符放在一個地方,忘了把它放在另一個地方。這是一致的,我有問題'#include ' –

+0

它找不到這個庫 –

+0

ndk.dir = C \:\\ Users \\ Filip \\ AppData \\ Local \\ Android \\ sdk \\ ndk-bundle 是的 –