一 、問題方案
- 報錯問題
Error:Execution failed for task ':app:mergeDebugResources'.
> Error: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException:
Error:java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException:
A:這里可能是因為點9圖片的問題,找到對應圖片并打開,勾上showbadpatch可以修改點9圖片問題
- 報錯問題
Gradle 'AndroidUsbCamera-master' project refresh failed
Error:Configuration with name 'default' not found.
如圖:
A:導致上面的問題可能是由于以下導致:
a、settings.gradle包含了不正確的目錄:include ":目錄名"
b、app目錄下build.gradle文件目錄不正確:compile project(':目錄名')
c、引入的第三方庫下是否包含build.gradle文件
- 報錯問題
Installation failed with message Failed to finalize session : INSTALL_FAILED_INVALID_APK: Split lib_slice_9_apk was defined multiple times. It is possible that this issue is resolved by uninstalling an existing version of the apk if it is present, and the
A: 大意就是要說lib_dependencies_apk這個東西定義了多次,要我們點擊ok卸載重裝,但是點擊OK,還是運行不了:
a、清理項目之前編譯好的.class文件,重新編譯文件
點擊build->clean project ,然后再點擊 rebuild project。
b、刪除ide自動生成的一些文件,刪除.gradle , .idea , build 三個文件夾
- 報錯問題
文件本地查看沒問題,Android Studio上查看的時候里面的數據全錯亂
A:緩存問題。
a:清除緩存重啟studio - 》 File —> Invalidate Cahes/ Restart
b:刪除 項目路徑下的 .gradle .idea 文件, 以及 app 目錄下的build文件,然后重新編譯
c:清除build緩存 Clean 后 Rebuild一下
d:找到C 盤。用戶目錄。.AndroidStudio版本號 .AndroidStudio3.3\system\cache 文件夾,關閉studio后將其刪除
-
報錯問題
微信截圖_20200413193710.png
A:引用androidX沖突問題
在gradle.properties文件中加:
android.useAndroidX=true
android.enableJetifier=true
-
報錯問題
微信截圖_20200820201254.png
A:代理配置問題
打開 ~/.gradle/gradle.properties (如果是windows的話應該在
C:\Users\用戶\.gradle\gradle.properties),把https的兩行注釋掉即可,重啟AS。
- 報錯問題
Program type already present: org.apache.commons.codec.Decoder
A:引用重復jar包問題
1、navigate ->class ->查詢
2、 雙擊尋找重復jar包位置 然后通過以下方式之一處理:
(1)刪除重復jar包問題;
(2)用exclude解決,大概意思就是去掉 你不需要的類 如:
二、小貼士
<一> 導入別人的項目如何更改Gradle版本跟自己的相匹配
我們在導入別人的項目時,經常會卡在這個界面,如下圖所示:
這是由于在首次導入項目的時候AS默認是使用 gradle-wrapper-properties 中默認的設置,它會從網上下載所需要的對應版本的 gradle。這時我們只要把默認的加載修改為我們本地有的就ok了。即修改gradle-wrapper-properties 文件,同時修改build.gradle對應的dependencies中classpath路徑,如圖所示:
另一種方法就是下載對應的Gradle版本,并修改AS配置的Gradle路徑使之對應。
<二> 如何在AS中導入android的framework.jar包
從Eclipse 轉到Android Studio,必經 的一個過程就是導入第三方jar包,導入普通的jar包方式比較簡單,網上其他的例子也比較多,但是關于導入framework.jar包內容就比較少。 有時候開發需要一些依賴framework中隱藏方法的時候,我們可以導入framework.jar, 編譯的時候依賴framework, 打包的時候不打進去,這在eclipse中實現方式比較簡單,這里記錄下Android studio中導入framework.jar包的方式,其他系統jar包的導入方式同理。
1,首先將framework.jar拷貝到項目的/libs文件夾中,然后右鍵framework.jar文件,然后Add as Library ,再選當前的module。
操作之后,在你的Module的build.gradle中會增加了
這個時候我們已經添加了framework.jar包,但是我們還有改變framework.jar的作用域屬性,右鍵你的module,Open Module Setting,然后將framework.jar的Scope改為 Provided 。如圖所示:
改了framework.jar的作用域后,Module的build.gradle也會有改變,之前的compile files(‘libs/framework.jar’),會變成provided files(‘libs/framework.jar’)。
2,改了framework.jar 的scope后,再在修改project的build.gradle文件,改成如下所示:
這是在原有的基礎上加了gradle.projectsEvaluted{}里面的內容,這里要說明下”Xbootclasspath/p”后接的路徑,是相對于當前Project的根目錄,例子中的”:app\libs\framework.jar”其中的app為Module名,libs就是放framework.jar的文件夾了。此時,Make Project就OK了(報紅也沒有關系)。
如果想調用jar包里面的方法可能不會自動提示,這個時候修改一下module對應的*.iml文件,把framework.jar包的引用放到第一個,這時再調用方法就可以自動提示了。
<三> 如何在AS中引用so文件
AS中引用so庫其實是比較簡單的,只需要在Module相應的目錄下建立對應的文件夾,命名為jniLibs,再把相應的so文件放進去就行了,如圖所示:
至于為什么這么放置,其實是有一定依據的,原理如下:
其實在AndroidStudio中,我們之所以可以把jar包放在對應模塊的libs目錄下,比如app模塊(也就是通常意義下的主工程了)的libs目錄中,而不需要再去配置build.gradle文件,就可以正常使用這些jar包,是因為在AndroidStudio中新建項目時,系統已經在默認為我們配置好了gradle,看相應模塊下的build.gradle文件的話,一般會有這么一句:
dependencies { compile fileTree(dir: 'libs', include: ['.jar'])*}
其實,這句就是告訴gradle,我們的第三方jar包在libs目錄下,如果沒有這一行配置,那么理論上我們把jar包直接放在libs目錄下其實是不行的,只不過新建項目時系統已經為我們配好了。這里libs是個相對路徑,因為我們的build.gradle文件本身就在app模塊下,那么這里的libs當然也就是指app模塊下的libs,其實build.gradle文件中所有的路徑都可以寫相對路徑,我們下邊講的so包的路徑也是只寫相對路徑就可以了。
OK,言歸正傳,現在知道jar包的引入原理了,那么so包為什么要放在這樣的一個目錄下?能不能放在任意一個自定義的目錄呢?當然是可以的。
其實在build.gradle中,默認會有一些這樣的配置:
sourceSets {
main {
jniLibs.srcDirs = [**'src/main/jniLibs'**]
aidl.srcDirs = [**'src/main/aidl'**]
}
}
這些配置在你新建工程之后,在build.gradle文件中默認是沒有的,因為默認就是這樣的,當然也就不寫也可以,當然你寫出來也沒錯。意思是so包就去src/main/jniLibs目錄下找,aidl文件默認就到src/main/aidl目錄下找。當然還有許多其它的配置,你還可以配置你的AndroidManifest.xml文件在哪里,還可以配置你的Java代碼在哪里,如果你不配的話都會有一個默認值,這里只是以jniLibs和aidl為例而已。
看到這里你應該就明白了,為什么把so包直接放到src目錄下的main目錄下的jinLibs目錄就可以了,而不需要配置gradle文件了,因為系統默認就會到這個目錄下找,如果你想把so包放在一個你喜歡的地方,比如直接放在app目錄下的myJniLibs目錄下,那你只需要把上面內容改成:
sourceSets {
main {
jniLibs.srcDirs = ['myJniLibs']
aidl.srcDirs = ['src/main/aidl']
}
}
這樣就可以了。明白了原理,似乎一切都明了了,同理,如果不想把aidl文件放在默認目錄下,也可以改aidl.srcDirs的值,如果不想把java代碼放在默認目錄,就可以改java.srcDirs的值,如果不想把資源文件放在默認目錄下,就可以改res.srcDirs的值。。。還有幾個,同學們慢慢去研究吧,如果你想把目錄結構改的跟eclipse下的工程一樣,就改這里的值就可以了。