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

您的位置:首頁技術文章
文章詳情頁

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

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

問題背景

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

近期發現線上用戶有反應升級到以下開發環境后,打包apk后manifest文件中沒有應有的任何配置。

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

確認調查方向

首先要確認清楚到底是上述3個哪個的升級導致的問題。

在本地進行環境升級過程驗證了以下結論:

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

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

Android Gradle Plugin:4.0.2 是 4.1 的前一個版本,至此可以確認是 Android Gradle Plugin:4.1.0 的升級導致的不兼容問題。

明確了調查的方向,接下來就可以有的放矢了。

調查分析

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

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

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

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

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

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

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

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

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

先到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();

看來屬性已經變成了 multiApkManifestOutputDirectory。

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

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

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

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

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

總結

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

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

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

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

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩视频一区| 免费成人在线观看| 亚洲精品第一| 欧美va天堂在线| 桃色一区二区| 欧美日韩在线观看首页| 福利一区和二区| 免费日韩成人| 日韩精品91亚洲二区在线观看| 视频精品一区二区| 麻豆精品网站| 一本综合精品| 亚洲精品福利| 亚洲精品九九| 日韩不卡一二三区| 久久国产精品免费精品3p| 欧美一级一区| 欧美日韩精品一区二区三区视频 | 亚洲人成网77777色在线播放| 日韩天堂av| 免费精品视频| 综合激情在线| 18国产精品| 国产精品毛片久久久| 国产精品欧美大片| 久久久久伊人| 97精品国产一区二区三区| 吉吉日韩欧美| 香蕉视频亚洲一级| 久久在线电影| 中文日韩欧美| 亚洲三级国产| 国产视频网站一区二区三区| 青青在线精品| 麻豆视频观看网址久久| 国产suv精品一区二区四区视频| 97精品在线| 亚洲女同一区| 亚洲另类av| 国产剧情一区| 亚洲精品成人图区| 国产专区一区| 三级久久三级久久久| 国产欧美亚洲一区| 精品亚洲成人| 特黄特色欧美大片| 99在线精品免费视频九九视| 亚洲性视频在线| 日韩不卡在线观看日韩不卡视频| 国产精品theporn| 激情国产在线| 午夜在线一区| 国产精品一线| 欧洲在线一区| 视频一区免费在线观看| 国产日韩一区二区三区在线 | 欧美精品99| 久久婷婷一区| 亚洲免费观看高清完整版在线观| 国产精品成人**免费视频 | 欧美精品91| 亚洲国产专区| 国产麻豆一区| 亚洲欧美一区在线| 国产午夜久久av| 欧美1区2区3区| 国产精品香蕉| 亚洲成人精选| 国产精品成人自拍| 99在线|亚洲一区二区| 国产精品视频一区二区三区四蜜臂| 日韩理论视频| 国产精品一线| 丰满少妇一区| 999国产精品永久免费视频app| 日韩欧美一区二区三区免费观看| 男女激情视频一区| 日本va欧美va欧美va精品| 99国产精品| 麻豆91在线播放| 蜜桃精品在线| 日韩国产一二三区| 久久久噜噜噜| 久久精品凹凸全集| 欧美日韩国产在线一区| 欧美国产视频| 亚洲tv在线| 婷婷成人在线| 国产精品啊啊啊| 蜜桃视频第一区免费观看| 偷拍亚洲精品| 尤物精品在线| 亚洲国产福利| 国产精品尤物| 亚洲日本免费电影| 精品一区毛片| 精品国产乱码| 日韩手机在线| 好看不卡的中文字幕| 精品三级在线| 日本不卡视频在线| 91精品99| 日韩精品永久网址| 国产精品亚洲四区在线观看 | 国产欧美视频在线| 免费看日韩精品| 成人久久一区| 欧美国产专区| 欧美欧美黄在线二区| 视频一区在线播放| 亚洲大全视频| 成人羞羞在线观看网站| 精品伊人久久久| 青青草国产精品亚洲专区无| 久久先锋影音| 青青青免费在线视频| 免费在线亚洲欧美| 国产精品密蕾丝视频下载| 亚洲精品日韩久久| 99在线精品免费视频九九视| 久久一区二区三区电影| 超碰在线99| 亚洲伦乱视频| 欧美一区免费| 激情不卡一区二区三区视频在线| 亚洲免费中文| 蜜桃久久av一区| 欧美一区二区三区久久| 欧美成a人免费观看久久| 99视频精品全部免费在线视频| 日韩在线免费| 亚洲二区精品| 精品三级在线| 欧美亚洲人成在线| 老司机免费视频一区二区| 激情综合婷婷| 国产高清不卡| 国模大尺度视频一区二区| 中文字幕在线官网| 最新中文字幕在线播放| 日韩精品免费一区二区在线观看| 老司机久久99久久精品播放免费| 日韩伦理福利| 亚久久调教视频| 日韩中文字幕无砖| 亚洲一区二区三区免费在线观看| 亚洲深夜福利| 欧美日韩亚洲国产精品| 久久精品免视看国产成人| 国产综合亚洲精品一区二| 视频在线观看一区| 国产精品中文字幕制服诱惑| 午夜一级在线看亚洲| 午夜在线播放视频欧美| 国产96在线亚洲| 日韩中文字幕1| 精品国产精品久久一区免费式| 国产精品亚洲一区二区三区在线观看| 国产精品国产一区| 免费污视频在线一区| 欧美日一区二区| 99视频精品| 久久麻豆视频| 国产美女一区| 欧美一区二区三区免费看| 色婷婷色综合| 免费看精品久久片| 国产欧美久久一区二区三区| 国产精品欧美一区二区三区不卡 | 男女男精品视频网| 日韩精品一区二区三区中文在线| 日韩激情网站| 欧美日韩夜夜| 精品一区二区三区中文字幕视频| 国产日韩亚洲欧美精品| 国产精品毛片久久| 在线日韩欧美| 国产视频网站一区二区三区| 麻豆久久久久久| 99久久婷婷这里只有精品| 亚洲精品极品| 国产91欧美| 日本成人一区二区| 国内精品美女在线观看| 精品91久久久久| 亚洲理论在线| 另类国产ts人妖高潮视频| 久久av超碰| 国产精品2023| 日本不卡免费高清视频在线| 视频一区二区三区入口| 久久精品国产亚洲aⅴ| 免费一级片91| 日本久久精品| 蜜臀91精品一区二区三区| 亚洲播播91| 日韩高清三区| 亚洲黄色影院| 麻豆高清免费国产一区| 亚洲欧洲免费|