一、背景
項目開發中,AS(Android Studio)經常會用到通過關鍵字在項目空間下搜索對應結果。最經常用到的Find in Path。例如打開Find in Path后,可以選中Scope tab,選擇All Places范圍去搜索對應的關鍵字,下方會自動顯示對應的搜索結果。
Find in Path搜索時,可選的tab有In Project、Module、Directory和Scope。同時Scope下又細分了很多選項,即對應的選擇條件,例如All Places、Project Files、Project Source Files等等。但是無論是哪種tab,以及Scope tab下的哪種方式,有一點我們必須意識到的是,默認情況下是不包含非項目文件的。也就是說,對當前項目目錄而言,通過Find in Path搜索時,哪怕選的是Scope下的All Places,搜索的結果在一定意義上而言,都不是完整的。僅僅只是列出了項目文件中對應的匹配結果。
納尼 ?
....
是的。
復制代碼
二、非項目文件
2.1 自定義Scope不包含非項目文件
這里首先牽涉到一個名詞,非項目文件,即non-project files。那到底哪些是非項目文件,非項目文件又是如何指定的呢?
我們先來直接感受下:
在上圖選中Scope tab的情況下,如果我們點擊其右邊的...,會進入到一個Scopes的自定義界面,在這個界面中,我們可以新增、編輯或刪除自定義的Scope,其實說白了,就是可以自定義搜索的范圍,這個范圍,是依據合乎Scope Pattern的模式去對應匹配范圍,然后就可以針對此范圍進行關鍵字搜索。
例如,如果我想針對Buil目錄范圍去搜索,可以如下操作:
點擊+ >> Local >> 命名Build,此時可以看到如下界面。
其中,就赫然發現了上述中的
non-project files這一稱謂。並且,即使是我們自定義的
Scope,無論怎樣設置
Pattern,也將不會包括
非項目文件。
Scope Pattern官方文檔說明如下:
www.jetbrains.com/help/idea/2…
最簡單的,我們填入一個針對項目全局目錄下的Pattern,可以看到圖示結果。
此時,點擊OK,表明自定義的Scope范圍創建成功。
我們重新看下搜索結果。
是的,此時依然是不包含非項目文件的。
2.2 非項目文件的指定
AS中每個模塊,在構建項目之前,都有一個sync的過程。這其中,包括對每一個模塊的配置聲明,模塊的配置聲明,是有sync過程中的Gradle Task產生,會形成一個.iml的文件。每個模塊下的.iml文件中,都包括了模塊名,模塊路徑,依賴庫信息,語言及版本,模塊目錄等信息。其中,模塊目錄中就包括了sourceFolder和excludeFolder聲明。
如:
<content url="file://$MODULE_DIR$"> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/kapt/devDebug" isTestSource="false" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/dev/debug" isTestSource="false" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/dev/debug" isTestSource="false" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/dev/debug" isTestSource="false" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/dev/debug" isTestSource="false" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/kaptKotlin/devDebug" isTestSource="false" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/dev/debug" type="java-resource" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/dev/debug" type="java-resource" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/src/devDebug/res" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/devDebug/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/devDebug/assets" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/devDebug/aidl" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/devDebug/java" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/devDebug/rs" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/devDebug/shaders" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/kapt/devDebugAndroidTest" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/dev/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/dev/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/dev/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/dev/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/dev/debug" type="java-test-resource" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/dev/debug" type="java-test-resource" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDevDebug/res" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDevDebug/resources" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDevDebug/assets" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDevDebug/aidl" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDevDebug/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDevDebug/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDevDebug/shaders" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/kapt/devDebugUnitTest" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/dev/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/src/testDevDebug/res" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/testDevDebug/resources" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/testDevDebug/assets" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/testDevDebug/aidl" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/testDevDebug/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/testDevDebug/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/testDevDebug/shaders" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/dev/res" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/dev/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/dev/assets" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/dev/aidl" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/dev/java" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/dev/rs" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/dev/shaders" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDev/res" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDev/resources" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDev/assets" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDev/aidl" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDev/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDev/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDev/shaders" isTestSource=