一 编整、問(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.
如圖:
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翼闹。
- 報(bào)錯(cuò)問(wèn)題
Program type already present: org.apache.commons.codec.Decoder
A:引用重復(fù)jar包問(wèn)題
1斑鼻、navigate ->class ->查詢
2、 雙擊尋找重復(fù)jar包位置 然后通過(guò)以下方式之一處理:
(1)刪除重復(fù)jar包問(wèn)題猎荠;
(2)用exclude解決,大概意思就是去掉 你不需要的類 如:
二坚弱、小貼士
<一> 導(dǎo)入別人的項(xiàng)目如何更改Gradle版本跟自己的相匹配
我們?cè)趯?dǎo)入別人的項(xiàng)目時(shí),經(jīng)常會(huì)卡在這個(gè)界面关摇,如下圖所示:
這是由于在首次導(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路徑停撞,如圖所示:
另一種方法就是下載對(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襟士。
操作之后,在你的Module的build.gradle中會(huì)增加了
這個(gè)時(shí)候我們已經(jīng)添加了framework.jar包嚷量,但是我們還有改變framework.jar的作用域?qū)傩月穑益I你的module,Open Module Setting蝶溶,然后將framework.jar的Scope改為 Provided 嗜历。如圖所示:
改了framework.jar的作用域后,Module的build.gradle也會(huì)有改變,之前的compile files(‘libs/framework.jar’)秸脱,會(huì)變成provided files(‘libs/framework.jar’)落包。
2部蛇,改了framework.jar 的scope后摊唇,再在修改project的build.gradle文件,改成如下所示:
這是在原有的基礎(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)去就行了,如圖所示:
至于為什么這么放置将饺,其實(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下的工程一樣贪绘,就改這里的值就可以了。