日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Android Gradle Plug 4.1.0 升級后gradle獲取manifest位置失敗問題解決

瀏覽:127日期:2022-09-22 09:46:55

問題背景

項目編譯過程中,使用了類似Android Gradle Plugin的gradle插件進(jìn)行編譯,在最終打包apk時,會動態(tài)修改manifest文件。

近期發(fā)現(xiàn)線上用戶有反應(yīng)升級到以下開發(fā)環(huán)境后,打包apk后manifest文件中沒有應(yīng)有的任何配置。

Android Gradle Plugin:4.1.0Gradle:6.5Android Studio:4.1

確認(rèn)調(diào)查方向

首先要確認(rèn)清楚到底是上述3個哪個的升級導(dǎo)致的問題。

在本地進(jìn)行環(huán)境升級過程驗證了以下結(jié)論:

Android Gradle Plugin:4.1.0 強(qiáng)制要求 Android Studio:4.1 + Gradle:6.5。然而 以下環(huán)境下打包過程是正常的:

Android Gradle Plugin:4.0.2Gradle:6.5Android Studio:4.1

Android Gradle Plugin:4.0.2 是 4.1 的前一個版本,至此可以確認(rèn)是 Android Gradle Plugin:4.1.0 的升級導(dǎo)致的不兼容問題。

明確了調(diào)查的方向,接下來就可以有的放矢了。

調(diào)查分析

我們的gradle插件,是通過以下代碼獲取到manifest文件后做處理的:

new File(output.processManifestProvider.get().manifestOutputDirectory.get().getAsFile(), 'AndroidManifest.xml')

其實并非如此簡單,只是這一句是最關(guān)鍵的。在gradle插件中增加了一些關(guān)鍵打印語句后,編譯過程中得到了以下錯誤提示:

Could not get unknown property ’manifestOutputDirectory’ for task ’:app:processDebugManifest’ of type com.android.build.gradle.tasks.ProcessMultiApkApplicationManifest

百度了一下,沒有任何相關(guān)記錄,畢竟距離 Android Gradle Plugin:4.1.0 正式發(fā)布才過去2個月,只好自給自足。

很明顯是讀取manifest文件位置的屬性失效了,那最直接的方法就是看源碼。找到 Android Gradle Plugin:4.1.0 的jar包看看就行。

又是百度一下,很可惜,沒有下載地址。

上JCenter找,結(jié)果JCenter倉庫只更新到2.x版本。

也對,好像是從 Android Studio 3.0 開始,google就將 Android Gradle Plugin 轉(zhuǎn)移至 google() 倉庫了,那只能去 google() 倉庫找了,一時半會也不知道具體地址,以前的編譯過程中也沒留意看studio的編譯日志輸出,當(dāng)然如果是一個全新工程環(huán)境,編譯一下,肯定能找到倉庫地址的,不過我懶得搞。

先到AS的緩存路徑下碰碰運氣吧,不過碰運氣也得先有個方向,別忘了Android Gradle Plugin的classpath配置:

classpath ’com.android.tools.build:gradle:4.1.0’

果不其然,在以下路徑找到了:

/Users/jackie/.gradle/caches/modules-2/files-2.1/com.android.tools.build/gradle

加載過的各種版本都有,直接拿到 4.1.0 的jar包看源碼,在 ProcessMultiApkApplicationManifest.class 中找到了以下代碼:

File mergedManifestOutputFile = new File(((Directory)getMultiApkManifestOutputDirectory().get()).getAsFile(), FileUtils.join(new String[] { dirName, 'AndroidManifest.xml' }));

同時還有一個抽象方法:

public abstract DirectoryProperty getMultiApkManifestOutputDirectory();

看來屬性已經(jīng)變成了 multiApkManifestOutputDirectory。

如果不確定,我們再看看 4.0.2 的源碼,在 ProcessApplicationManifest.class 中找到了以下代碼:

復(fù)制代碼 代碼如下:File manifestOutputFile = new File(((Directory)getManifestOutputDirectory().get()).getAsFile(), FileUtils.join(new String[] { apkData.getDirName(), 'AndroidManifest.xml' }));

很明顯,在 4.0.2 版本時,獲取manifest文件路徑的屬性確實是 manifestOutputDirectory ,而task本質(zhì)上是一個 ProcessApplicationManifest 實例,但從 4.1.0 版本開始, task變?yōu)?ProcessMultiApkApplicationManifest 的實例,屬性變?yōu)?multiApkMnifestOutputDirectory 了。

好了,剩下的就是做一下版本兼容了,大功告成。

復(fù)制代碼 代碼如下:new File(output.processManifestProvider.get().multiApkManifestOutputDirectory.get().getAsFile(), 'AndroidManifest.xml')

總結(jié)

大部分基于gradle的編譯腳本,其工作原理都一樣,就是在編寫自定義的task、在某個預(yù)設(shè)的task之前或之后做自定義的特殊處理等等,更高級一點的gradle插件也不例外。

而 Android Gradle Plugin 同樣也只是一個Google官方開發(fā)的gradle插件,每次升級版本都會伴隨著一些“task名變更”、“task處理內(nèi)容變更”、“task執(zhí)行順序變更”等等的更新,這些更新很可能就會影響到我們這些基于其“預(yù)置task”做特殊處理的gradle插件,所以大部分版本兼容問題都應(yīng)該從這個方向出發(fā)調(diào)查。

另外,有時候Gradle的升級也會帶來一些兼容問題。

到此這篇關(guān)于Android Gradle Plug 4.1.0 升級后gradle獲取manifest位置失敗問題解決的文章就介紹到這了,更多相關(guān)Android Gradle4.1升級內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲免费成人| 欧美日韩18| 色爱综合网欧美| 高清一区二区| 久久国产毛片| 免费在线看一区| 日韩亚洲国产欧美| 久久都是精品| 日本精品一区二区三区在线观看视频| 日韩二区在线观看| 麻豆久久一区二区| 久久一区二区中文字幕| 亚洲在线观看| 欧美精品中文字幕亚洲专区| 国产成人精选| 图片区亚洲欧美小说区| 日韩高清三区| 波多视频一区| 亚洲免费毛片| 天堂中文在线播放| 99香蕉国产精品偷在线观看| 亚州av日韩av| 国产在线观看91一区二区三区| 欧美亚洲激情| 91麻豆精品| 亚洲精品国产嫩草在线观看| 亚洲尤物av| 日本蜜桃在线观看视频| 综合亚洲视频| 日韩成人精品一区| 亚洲免费成人av在线| 国产v日韩v欧美v| 蜜臀av在线播放一区二区三区| 精品色999| 在线精品亚洲| 日韩理论片av| 日韩国产成人精品| 性欧美videohd高精| 亚洲精品美女91| 黄色在线观看www| 亚洲精品高潮| 青青久久av| 国产精品一区三区在线观看| 香蕉国产精品| 9999国产精品| 国产欧美综合一区二区三区| 欧美精品羞羞答答| 国产精品99精品一区二区三区∴| 欧美精品一区二区久久| 精品亚洲自拍| 亚洲精品系列| 色婷婷狠狠五月综合天色拍| 日韩 欧美一区二区三区| 亚洲爱爱视频| 久久精品免视看国产成人| 蜜臀精品一区二区三区在线观看| 成人国产精品一区二区网站| 亚洲精品免费观看| 精品中文一区| av中文资源在线资源免费观看| 亚洲欧洲美洲国产香蕉| 色婷婷久久久| 国产一区二区三区视频在线| 亚洲精品在线二区| 欧美在线亚洲综合一区| 国产一区二区三区四区五区传媒| 日韩极品在线观看| 好吊一区二区三区| 天堂av在线| 美女久久精品| 国产精品乱战久久久| 日产欧产美韩系列久久99| 夜夜嗨一区二区三区| 丝袜美腿诱惑一区二区三区 | 九九99久久精品在免费线bt| 亚洲欧洲日韩| 蜜臀av一区二区在线免费观看| 亚洲二区视频| 欧美日韩视频网站| 国产成人免费| 国产精品久久久久久妇女| 亚洲日本欧美| 亚洲欧美日韩综合国产aⅴ| 91久久久精品国产| 国产一区日韩欧美| 米奇777超碰欧美日韩亚洲| 欧美片第1页| 欧美日韩视频免费观看| 中文字幕在线视频久| 超碰99在线| 日韩国产欧美| 久久中文字幕二区| 亚洲婷婷免费| 亚洲网站视频| 欧美a级一区| 婷婷成人在线| 亚洲激情欧美| 亚洲一区av| 日韩**一区毛片| 国产探花一区二区| 国产精品美女午夜爽爽| 免费亚洲婷婷| 中文字幕色婷婷在线视频| 成人看片网站| 好吊日精品视频| 亚洲视频电影在线| 视频一区日韩精品| 国产探花在线精品| 久久精品人人| av综合电影网站| 日韩免费福利视频| 日韩久久精品网| 日韩视频中文| 深夜日韩欧美| 国内精品伊人| 欧美精选一区二区三区| 中文字幕乱码亚洲无线精品一区| 日本麻豆一区二区三区视频| 国产精品美女久久久久久不卡| 老司机免费视频一区二区| 日韩电影在线视频| 欧美特黄a级高清免费大片a级| 亚洲有吗中文字幕| 欧美成人一二区| 在线视频观看日韩| 综合欧美精品| 欧美午夜网站| 美女av在线免费看| 在线亚洲一区| 国产精品亚洲综合色区韩国 | 欧美少妇精品| 免费国产自线拍一欧美视频| 国产精品v一区二区三区| 免费看av不卡| 午夜在线观看免费一区| 国产一级成人av| 日韩欧美在线中字| 中文字幕一区二区三区在线视频| 久久69成人| 亚洲免费播放| 欧美成人精品一级| 国产视频一区在线观看一区免费| 国产精品一页| 国产主播一区| 欧美天堂在线| 午夜久久免费观看| 国产精品99久久久久久董美香| 精品在线91| 欧美黄色精品| 亚洲综合日本| 国产美女高潮在线| 日韩激情av在线| 欧洲毛片在线视频免费观看| 国产精品99精品一区二区三区∴| 99久久久久久中文字幕一区| 日韩二区三区四区| 亚洲国产成人精品女人| 麻豆中文一区二区| 免费国产亚洲视频| 欧美三级精品| 国产福利资源一区| 亚洲精品三级| 欧美精品一卡| 国产欧洲在线| 国产福利亚洲| 婷婷成人av| 亚洲激情社区| 久久影视一区| 国产精品国产一区| 日韩高清欧美激情| 自拍日韩欧美| 亚洲黄色中文字幕| 国产精品第一国产精品| 日韩中文字幕亚洲一区二区va在线| 亚洲成a人片| 成人国产精品一区二区网站| 国产精品资源| 欧美一级全黄| 在线日韩成人| 国产偷自视频区视频一区二区| 成人午夜毛片| 国产精品亲子伦av一区二区三区| 老司机久久99久久精品播放免费| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 亚洲网站视频| 日韩激情一区| 精品视频高潮| 久久久国产精品入口麻豆| 国产精品亚洲综合在线观看| 婷婷综合国产| 视频一区二区欧美| 在线一区视频| 亚洲精品一区二区妖精| 电影天堂国产精品| 国产精品高颜值在线观看| 免费在线亚洲欧美| 国产精品久久久久毛片大屁完整版| 欧美视频久久| 色婷婷亚洲mv天堂mv在影片| 免费国产自久久久久三四区久久|