2016-05-02 88 views
2

原生支持爲了獲得索引在Android Studio編輯器,我應該在的build.gradle中添加以下代碼:的Android NDK工作室:編譯與NDK構建和獲取與搖籃實驗

ndk { 
      moduleName "MyModule" 
      CFlags.add("-I${file("src/main/jni/headers1")}".toString()) 
      CFlags.add("-I${file("src/main/jni/headers2")}".toString()) 
} 

但隨後gradle這個忽略我的Android.mk,如果我將從build.gradle中刪除這段代碼,那麼我將無法在編輯器中正確編制索引,因爲所有頭文件都在這兩個文件夾中。 是否有人知道如何使我的Android.mk編譯gradle,並仍然可以進行本機編輯和調試?

即時通訊使用: 的Android 2.1演播室穩定 gradle這個實驗性:0.7.0 我build.grade:

apply plugin: "com.android.model.application" 

def ndkDir = System.getenv("ANDROID_NDK_HOME") 
def propertiesFile = project.rootProject.file('local.properties') 
if (propertiesFile.exists()) { 
    Properties properties = new Properties() 
    properties.load(propertiesFile.newDataInputStream()) 
    ndkDir = properties.getProperty('ndk.dir') 
} 
model { 
    android.sources { 
     main { 
      jni { 
       source { 
        srcDirs.removeAll() 
        srcDir 'src/main/none' 
       } 
      } 
      jniLibs { 
       source { 
        srcDir 'src/main/libs' 
       } 
      } 
     } 
    } 
    android { 
     compileSdkVersion 23 
     buildToolsVersion "23.0.2" 

     ndk { 
       moduleName "MyModule" 
       CFlags.add("-I${file("src/main/jni/headers1")}".toString()) 
       CFlags.add("-I${file("src/main/jni/headers2")}".toString()) 
    } 

     defaultConfig { 
      applicationId "com.myapp.android.me" 
      minSdkVersion.apiLevel 19 
      targetSdkVersion.apiLevel 23 
     } 

     buildTypes { 
      debug { 
       ndk { 
        debuggable = true 
       } 
      } 
     } 
    } 

} 
dependencies { 
    compile fileTree(dir: "libs", include: ["*.jar"]) 
    compile 'com.google.code.gson:gson:2.2.4' 
} 

task buildNative(type: Exec, description: 'Compile JNI source via NDK'){ 
    commandLine "${ndkDir}/ndk-build",'NDK_DEBUG=1','NDK_PROJECT_PATH ='+ getProjectDir() + '/src/main' 
} 
tasks.withType(AbstractCompile) { 
    compileTask -> compileTask.dependsOn buildNative 
} 
+0

檢查http://stackoverflow.com/a/32640823/192373 - 如果你有更多的speci fic的問題,我會回答,當我拿到一個電腦鍵盤 –

+0

嗨亞歷克斯,感謝您的評論,我試圖獲得本地調試能力在AS和使用本機編輯,但不能讓他們兩個,我必須使用我的Android.mk,因爲我有彙編文件進行編譯。如果我在build.gradle中編寫「moduleName MyModule」,那麼本地編輯工作,但gradle忽略我的Android.mk文件,如果我從build.gradle中刪除「moduleName MyModule」,按照我的Android.mk編寫的gradle編譯並且本地調試正在工作但不是本地編輯,因爲AS不知道在哪裏尋找符號(headers1和header2) – VitalyD

+0

你試過鏈接的答案嗎?它正是如此,允許本地調試和編輯。如果task.name.startsWith('compile')&& task.name.contains('MainC')'必須禁用任務。我也使用'task.name.endsWith(「SharedLibrary」)'作爲標準來設置'dependsOn buildNative' –

回答

2

您可以設置實驗插件來運行你的buildNative任務,而不是的內置編譯和鏈接任務:

tasks.all { 
    task -> 
     if (task.name.startsWith('compile') && task.name.contains('MainC')) { 
      task.enabled = false 
     } 
     if (task.name.startsWith('link')) { 
      task.enabled = false 
     } 
     if (task.name.endsWith('SharedLibrary')) { 
      task.dependsOn buildNative 
     } 
}