Android studio 使用過(guò)程中的問(wèn)題方案和小貼士(一)

一 、問(wèn)題方案

  • 報(bào)錯(cuò)問(wèn)題

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:這里可能是因?yàn)辄c(diǎn)9圖片的問(wèn)題,找到對(duì)應(yīng)圖片并打開(kāi),勾上showbadpatch可以修改點(diǎn)9圖片問(wèn)題


  • 報(bào)錯(cuò)問(wèn)題

Gradle 'AndroidUsbCamera-master' project refresh failed
Error:Configuration with name 'default' not found.

如圖:

Paste_Image.png

A:導(dǎo)致上面的問(wèn)題可能是由于以下導(dǎo)致:
    a、settings.gradle包含了不正確的目錄:include ":目錄名"
    b、app目錄下build.gradle文件目錄不正確:compile project(':目錄名')
    c、引入的第三方庫(kù)下是否包含build.gradle文件

  • 報(bào)錯(cuò)問(wèn)題

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: 大意就是要說(shuō)lib_dependencies_apk這個(gè)東西定義了多次,要我們點(diǎn)擊ok卸載重裝,但是點(diǎn)擊OK,還是運(yùn)行不了:
a、清理項(xiàng)目之前編譯好的.class文件,重新編譯文件

點(diǎn)擊build->clean project ,然后再點(diǎn)擊 rebuild project。

b、刪除ide自動(dòng)生成的一些文件,刪除.gradle , .idea , build 三個(gè)文件夾

  • 報(bào)錯(cuò)問(wèn)題

文件本地查看沒(méi)問(wèn)題,Android Studio上查看的時(shí)候里面的數(shù)據(jù)全錯(cuò)亂

A:緩存問(wèn)題。

a:清除緩存重啟studio - 》 File —> Invalidate Cahes/ Restart
b:刪除 項(xiàng)目路徑下的 .gradle .idea 文件, 以及 app 目錄下的build文件,然后重新編譯
c:清除build緩存 Clean 后 Rebuild一下
d:找到C 盤(pán)。用戶目錄。.AndroidStudio版本號(hào) .AndroidStudio3.3\system\cache 文件夾,關(guān)閉studio后將其刪除

  • 報(bào)錯(cuò)問(wèn)題


    微信截圖_20200413193710.png

    A:引用androidX沖突問(wèn)題
    在gradle.properties文件中加:

android.useAndroidX=true
android.enableJetifier=true

  • 報(bào)錯(cuò)問(wèn)題


    微信截圖_20200820201254.png

A:代理配置問(wèn)題

打開(kāi) ~/.gradle/gradle.properties (如果是windows的話應(yīng)該在
C:\Users\用戶\.gradle\gradle.properties),把https的兩行注釋掉即可,重啟AS。

image.png
  • 報(bào)錯(cuò)問(wèn)題

Program type already present: org.apache.commons.codec.Decoder

A:引用重復(fù)jar包問(wèn)題

1、navigate ->class ->查詢

20190416173555396.png

2、 雙擊尋找重復(fù)jar包位置 然后通過(guò)以下方式之一處理:
(1)刪除重復(fù)jar包問(wèn)題;

20190416172957123.png

(2)用exclude解決,大概意思就是去掉 你不需要的類 如:

20190416173444703.png

二、小貼士

<一> 導(dǎo)入別人的項(xiàng)目如何更改Gradle版本跟自己的相匹配

我們?cè)趯?dǎo)入別人的項(xiàng)目時(shí),經(jīng)常會(huì)卡在這個(gè)界面,如下圖所示:


Paste_Image.png

  這是由于在首次導(dǎo)入項(xiàng)目的時(shí)候AS默認(rèn)是使用 gradle-wrapper-properties 中默認(rèn)的設(shè)置,它會(huì)從網(wǎng)上下載所需要的對(duì)應(yīng)版本的 gradle。這時(shí)我們只要把默認(rèn)的加載修改為我們本地有的就ok了。即修改gradle-wrapper-properties 文件,同時(shí)修改build.gradle對(duì)應(yīng)的dependencies中classpath路徑,如圖所示:

Paste_Image.png
Paste_Image.png

另一種方法就是下載對(duì)應(yīng)的Gradle版本,并修改AS配置的Gradle路徑使之對(duì)應(yīng)。

<二> 如何在AS中導(dǎo)入android的framework.jar包

從Eclipse 轉(zhuǎn)到Android Studio,必經(jīng) 的一個(gè)過(guò)程就是導(dǎo)入第三方j(luò)ar包,導(dǎo)入普通的jar包方式比較簡(jiǎn)單,網(wǎng)上其他的例子也比較多,但是關(guān)于導(dǎo)入framework.jar包內(nèi)容就比較少。 有時(shí)候開(kāi)發(fā)需要一些依賴framework中隱藏方法的時(shí)候,我們可以導(dǎo)入framework.jar, 編譯的時(shí)候依賴framework, 打包的時(shí)候不打進(jìn)去,這在eclipse中實(shí)現(xiàn)方式比較簡(jiǎn)單,這里記錄下Android studio中導(dǎo)入framework.jar包的方式,其他系統(tǒng)jar包的導(dǎo)入方式同理。
1,首先將framework.jar拷貝到項(xiàng)目的/libs文件夾中,然后右鍵framework.jar文件,然后Add as Library ,再選當(dāng)前的module。

Paste_Image.png

  操作之后,在你的Module的build.gradle中會(huì)增加了

Paste_Image.png

這個(gè)時(shí)候我們已經(jīng)添加了framework.jar包,但是我們還有改變framework.jar的作用域?qū)傩裕益I你的module,Open Module Setting,然后將framework.jar的Scope改為 Provided 。如圖所示:

Paste_Image.png

改了framework.jar的作用域后,Module的build.gradle也會(huì)有改變,之前的compile files(‘libs/framework.jar’),會(huì)變成provided files(‘libs/framework.jar’)。

2,改了framework.jar 的scope后,再在修改project的build.gradle文件,改成如下所示:

Paste_Image.png

這是在原有的基礎(chǔ)上加了gradle.projectsEvaluted{}里面的內(nèi)容,這里要說(shuō)明下”Xbootclasspath/p”后接的路徑,是相對(duì)于當(dāng)前Project的根目錄,例子中的”:app\libs\framework.jar”其中的app為Module名,libs就是放framework.jar的文件夾了。此時(shí),Make Project就OK了(報(bào)紅也沒(méi)有關(guān)系)。
  如果想調(diào)用jar包里面的方法可能不會(huì)自動(dòng)提示,這個(gè)時(shí)候修改一下module對(duì)應(yīng)的*.iml文件,把framework.jar包的引用放到第一個(gè),這時(shí)再調(diào)用方法就可以自動(dòng)提示了。

<三> 如何在AS中引用so文件

AS中引用so庫(kù)其實(shí)是比較簡(jiǎn)單的,只需要在Module相應(yīng)的目錄下建立對(duì)應(yīng)的文件夾,命名為jniLibs,再把相應(yīng)的so文件放進(jìn)去就行了,如圖所示:

QQ截圖20170325190549.png

  至于為什么這么放置,其實(shí)是有一定依據(jù)的,原理如下:
  其實(shí)在AndroidStudio中,我們之所以可以把jar包放在對(duì)應(yīng)模塊的libs目錄下,比如app模塊(也就是通常意義下的主工程了)的libs目錄中,而不需要再去配置build.gradle文件,就可以正常使用這些jar包,是因?yàn)樵贏ndroidStudio中新建項(xiàng)目時(shí),系統(tǒng)已經(jīng)在默認(rèn)為我們配置好了gradle,看相應(yīng)模塊下的build.gradle文件的話,一般會(huì)有這么一句:

dependencies { compile fileTree(dir: 'libs', include: ['.jar'])*}

其實(shí),這句就是告訴gradle,我們的第三方j(luò)ar包在libs目錄下,如果沒(méi)有這一行配置,那么理論上我們把jar包直接放在libs目錄下其實(shí)是不行的,只不過(guò)新建項(xiàng)目時(shí)系統(tǒng)已經(jīng)為我們配好了。這里libs是個(gè)相對(duì)路徑,因?yàn)槲覀兊腷uild.gradle文件本身就在app模塊下,那么這里的libs當(dāng)然也就是指app模塊下的libs,其實(shí)build.gradle文件中所有的路徑都可以寫(xiě)相對(duì)路徑,我們下邊講的so包的路徑也是只寫(xiě)相對(duì)路徑就可以了。
  OK,言歸正傳,現(xiàn)在知道jar包的引入原理了,那么so包為什么要放在這樣的一個(gè)目錄下?能不能放在任意一個(gè)自定義的目錄呢?當(dāng)然是可以的。
其實(shí)在build.gradle中,默認(rèn)會(huì)有一些這樣的配置:

   sourceSets { 
                main {
                         jniLibs.srcDirs = [**'src/main/jniLibs'**] 
                         aidl.srcDirs = [**'src/main/aidl'**]
                }
   }

這些配置在你新建工程之后,在build.gradle文件中默認(rèn)是沒(méi)有的,因?yàn)槟J(rèn)就是這樣的,當(dāng)然也就不寫(xiě)也可以,當(dāng)然你寫(xiě)出來(lái)也沒(méi)錯(cuò)。意思是so包就去src/main/jniLibs目錄下找,aidl文件默認(rèn)就到src/main/aidl目錄下找。當(dāng)然還有許多其它的配置,你還可以配置你的AndroidManifest.xml文件在哪里,還可以配置你的Java代碼在哪里,如果你不配的話都會(huì)有一個(gè)默認(rèn)值,這里只是以jniLibs和aidl為例而已。
  看到這里你應(yīng)該就明白了,為什么把so包直接放到src目錄下的main目錄下的jinLibs目錄就可以了,而不需要配置gradle文件了,因?yàn)橄到y(tǒng)默認(rèn)就會(huì)到這個(gè)目錄下找,如果你想把so包放在一個(gè)你喜歡的地方,比如直接放在app目錄下的myJniLibs目錄下,那你只需要把上面內(nèi)容改成:

   sourceSets { 
                main {
                       jniLibs.srcDirs = ['myJniLibs']
                       aidl.srcDirs = ['src/main/aidl']
                }
   }

這樣就可以了。明白了原理,似乎一切都明了了,同理,如果不想把a(bǔ)idl文件放在默認(rèn)目錄下,也可以改aidl.srcDirs的值,如果不想把java代碼放在默認(rèn)目錄,就可以改java.srcDirs的值,如果不想把資源文件放在默認(rèn)目錄下,就可以改res.srcDirs的值。。。還有幾個(gè),同學(xué)們慢慢去研究吧,如果你想把目錄結(jié)構(gòu)改的跟eclipse下的工程一樣,就改這里的值就可以了。

mark

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容