一、背景
項目開發中,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=