2015-09-01 52 views
22

我正在嘗試使用Android Studio 1.3.1編譯使用實驗gradle語法的NDK項目。如何排除實驗gradle中的cpp文件?

build.gradle看起來非常像從Teapot example

隨着我的源代碼樹有,我不想在構建包括一些文件例外之一。 我無法刪除這些文件,所以我需要gradle來忽略它們。

我嘗試添加一個exclude定義:

android.sources { 
    main { 
     jni { 
      source { 
       srcDirs 'src/main/jni' 

       excludes += "src/main/jni/FileToExclude.cpp" 
      } 
     } 

    } 
} 

但這並不影響結果。 gradle仍然試圖編譯這個文件。

我試過excludes,exclude=,+=並沒有任何東西,但沒有排列的作品。

+0

隨着'gradle這個實驗性:0.3。 0','exclude'語法可用,請參閱http://stackoverflow.com/questions/32636150/define-local-src-files-in-ndk-dsl/32640823#32640823 –

回答

10

從我發現,正確的指令,以排除從構建文件是排除,不排除。檢查你的build.gradle,以確保你沒有犯這個錯誤(你使用在提供的示例中排除了)。

Upd:好的,經過一番調查,我在AOSP問題跟蹤器上發現了this thread。主題首發說明如下:

源代碼集的java/resources組件允許包含/排除模式。

我們應該爲aidl/rs/jni/assets做到這一點。

問題仍然是開放的,所以我想這個功能必須在Android Gradle插件或Android Studio或兩者都實現(並且尚未實現)。它將在Android Studio 1.5中實現,至少這是標籤所說的內容。

+1

我做過了,請參閱上次編輯。 – shoosh

+1

@shoosh看起來還沒有實現,請參閱更新後的答案。 – aga

+2

看起來你運氣不好。除非你想構建你自己的gradle插件,否則你最好的選擇是通過ndk-build使用Android.mk。 –

0

我看着android源代碼,它看起來像你可以更新過濾器來排除你的文件。我不知道你使用的Gradle插件的版本是什麼,所以我不能確定底層api是什麼。您可以嘗試手動設置PatternFilterable以排除文件。

android.sources { 
    main { 
     jni { 
      source { 
       srcDirs 'src/main/jni' 
       getFilter().exclude('**/FileToExclude.cpp') 
      } 
     } 
    } 
} 

我看着Gradle Code Review,看到正在使用LanguageSourceSet。查看LanguageSourceSet的Gradle文檔,您可以訪問SourceDirectorySet,該文檔有PatternFilterable,您可以在其上設置排除。

-1

最簡單的方法是在的build.gradle設置屬性:

sourceSets.main.jni.srcDirs = [] // now, AS will not try to compile your source files 
sourceSets.main.jniLibs.srcDirs = ['libs'] // now, AS will pick up the compiled SO files from libs (where ndk-build will normally put them) 

您還可以定義一個「buildNative」任務,運行NDK,建設成爲compileTask的一部分,在這個answer定義。

+0

這個答案與問題無關 – rockeye

0

由於它仍然是實驗性的,所以Gradle實驗沒有太多文檔。但也有一些實驗,我能夠挖如何排除某些文件的方式,即:

model { 
    //... 

    android.sources { 
     //... 

     jni { 
      //... 

      source { 
       excludes.add("<FILE PATH>") // You can have multiple excludes.add(...) 
      } 
     } 
    } 
} 

注:解決方案適用於gradle這個實驗性0.7.0

相關問題