情況概述:
AAPT2 (Android Asset Packaging Tool) is a build tool that Android Studio and Android Gradle Plugin use to compile and package your app’s [resources].AAPT2 parses, indexes, and compiles the resources into a binary format that is optimized for the Android platform.這是官方的AS用戶指南定義的.
簡單來說摄悯,aapt2就是編譯和打包資源的工具揍愁,一般使用到的都是輸入為資源文件,輸出為帶有.flat擴(kuò)展名的中間二進(jìn)制文件。在Android Studio 3.0.0或者更高版本默認(rèn)開啟aapt2义黎,當(dāng)然也可以在配置文件gradle.properties中 手動關(guān)閉aapt2斤寂。
另外,還存在一個(gè)廢棄的aapt,aapt2是在aapt上做了優(yōu)化罗岖,作用一樣,aapt2為資源的增量編譯提供了支持腹躁。
簡單介紹后 桑包,談一下bug,報(bào)錯(cuò)如下
Caused by: org.gradle.process.internal.ExecException: Process 'command '項(xiàng)目路徑xxx\26.0.2\aapt.exe'' finished with non-zero exit value 1
另外發(fā)現(xiàn)布局報(bào)錯(cuò),具體已經(jīng)顯示得很明顯了:
找到錯(cuò)誤位置:
使用到相對布局中相對另一個(gè)View的位置纺非,紅色標(biāo)志屬性報(bào)錯(cuò)哑了,但是這個(gè)id在此xml已存在了,試圖在id前多加一個(gè)“+”烧颖。修改正確弱左。
aapt2用戶指南鏈接:https://developer.android.google.cn/studio/command-line/aapt2
報(bào)錯(cuò)修改參考鏈接:https://blog.csdn.net/asdf9328/article/details/50360358
問題總結(jié)
小豆最先使用默認(rèn)的aapt2進(jìn)行編譯,禁止后再次將資源文件進(jìn)行編譯炕淮,未改過除此其他的任何demo拆火,出現(xiàn)此問題仍不知何種原因,在解決這個(gè)問題中涂圆,發(fā)現(xiàn)很多朋友也遇到過這個(gè)問題们镜,總結(jié)有以下幾點(diǎn):
1.各種資源包之間存在沖突,或者重復(fù)润歉,解決沖突就行
2.使用圖片問題模狭,把jpg格式的圖片全部替換為png格式的圖片
3.緩存問題,緩存的目錄在\build\intermediates下面
4.使用高版本的AS和Gradle構(gòu)建項(xiàng)目踩衩,而項(xiàng)目選擇用的編譯版本過低嚼鹉,可去除高版本的高級屬性
這些朋友也解決了各自遇到的問題了,實(shí)屬有效驱富。所以要想解決問題锚赤,我們應(yīng)該獨(dú)自思考,去發(fā)現(xiàn)問題根本褐鸥,小豆一直
不知aapt2和aapt內(nèi)部編譯機(jī)制线脚,還應(yīng)深入了解aapt才行,經(jīng)常被師傅開玩笑說晶疼,自己寫代碼就是寫bug酒贬,但是在bug路上,我學(xué)到了很多翠霍。若朋友們有不同想法锭吨,歡迎幫小豆指正啦。