lint簡(jiǎn)介
Android Studio 提供一個(gè)名為 Lint 的代碼掃描工具解取,可幫助發(fā)現(xiàn)并糾正代碼結(jié)構(gòu)質(zhì)量的問(wèn)題步责,而無(wú)需實(shí)際執(zhí)行該應(yīng)用,也不必編寫(xiě)測(cè)試用例禀苦。該工具會(huì)報(bào)告其檢測(cè)到的每個(gè)問(wèn)題并提供該問(wèn)題的描述消息和嚴(yán)重級(jí)別蔓肯,以便您可以快速確定需要優(yōu)先進(jìn)行哪些關(guān)鍵改進(jìn)。此外振乏,您可以調(diào)低問(wèn)題的嚴(yán)重級(jí)別蔗包,忽略與項(xiàng)目無(wú)關(guān)的問(wèn)題,也可以調(diào)高嚴(yán)重級(jí)別慧邮,以突出特定問(wèn)題调限。
手動(dòng)清除
步驟
在Android studio的頂部菜單欄上選擇analyze-> Run inspection by name,在彈出框輸入unusedresourse進(jìn)入多余資源檢查误澳,可以自定義檢查范圍耻矮。檢查完畢后在菜單欄中選擇Refactor->removeUnusedResourses.具體參考 Android develeoper。
相關(guān)問(wèn)題
用此方法檢查出現(xiàn)眾多問(wèn)題:
- 檢查整個(gè)項(xiàng)目出的結(jié)果明顯shan有錯(cuò):
這么大一個(gè)項(xiàng)目只檢查出來(lái)兩個(gè)多余的字符串資源忆谓,這明顯是不符合常理的裆装,點(diǎn)開(kāi)任一模塊可以很容易發(fā)現(xiàn)未被引用的圖片資源。而逐模塊則檢查出很多陪毡。 - 逐模塊檢查也有問(wèn)題:
首先米母,單一模塊檢查無(wú)用資源出的結(jié)果僅僅是在該模塊內(nèi)沒(méi)有被引用的,如果把搜索范圍放到整個(gè)項(xiàng)目中仍然可能存在引用毡琉,這種情況下刪除是不可取的。 - lint刪除文件方式的不清楚:
當(dāng)逐模塊檢查出未被引用的資源文件后妙色,使用上文提到的removeUnusedResourses刪除的并不僅僅是此模塊下的資源桅滋,而是整個(gè)項(xiàng)目,這種情況下無(wú)法控制刪除的進(jìn)度。 - lint未把文件刪干凈:
當(dāng)刪除后編譯整個(gè)項(xiàng)目會(huì)報(bào)某些資源文件未找到的錯(cuò)誤丐谋,跟蹤這些錯(cuò)誤布局文件發(fā)現(xiàn)這些文件本身也未被引用芍碧。查閱網(wǎng)上資料說(shuō)需要多次調(diào)用lint才能清楚干凈,但是我嘗試后顯示已經(jīng)沒(méi)有unusedResouses号俐。
說(shuō)明
綜上所述泌豆,這種方式在我看來(lái)并不能達(dá)到清除項(xiàng)目多余資源文件的目的,尤其在項(xiàng)目非常龐大的情況下吏饿。
使用lint命令行刪除
步驟
打開(kāi)終端踪危,輸入
lint --check "UnusedResources" project_path > result.txt
前提是電腦已經(jīng)配置好lint的環(huán)境變量。生成的掃描結(jié)果將會(huì)存放在當(dāng)前目錄下的 result.txt 當(dāng)中猪落。
隨后可以根據(jù)結(jié)果贞远,批量刪除對(duì)應(yīng)的文件。
這是result.txt文件:
因?yàn)閞esult是按照格式排列的笨忌,這時(shí)候需要編寫(xiě)一段java代碼執(zhí)行刪除任務(wù):
/**
* 刪除 未使用的冗余資源(圖片 xml布局)
*
* @param b
*
* false 顯示資源列表
*
* true 顯示資源列表 并刪除資源
*
* @throws Exception
*/
private static void init(boolean b) throws Exception {
String encoding = "UTF-8"; // 字符格式
String projectPath = "/Users/baozi/Dev/shihui/android/";//Android工程所在地址
String filePath1 = "/Users/baozi";//result的所在路徑
File file = new File(filePath1, "result.txt");//獲取result.txt 文件 生成地址
if (file.isFile() && file.exists()) { // 判斷文件是否存在
InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);// 考慮到編碼格式
BufferedReader bufferedReader = new BufferedReader(read);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
if (line.contains("UnusedResources") && !line.contains("res/value") && !line.contains("appcompat")
&& !line.contains("res/xml")) {
// System.out.println(line);
int end = line.indexOf(":");
if (end != -1) {
String file_end = line.substring(0, end);
String f = projectPath + file_end;
System.out.println(f);
if (b) {
new File(f).delete();
System.out.println("刪除成功");
}
}
}
}
read.close();
}
}
然后在Android studio里面跑一下蓝仲,方式參考這篇博客。
理論上循環(huán)多次可以達(dá)到刪除多余文件的效果官疲。
結(jié)果
原來(lái)的安裝包為48.2mb袱结,采用這種方法為43.3mb,縮小了一點(diǎn)途凫,but....在控制臺(tái)啟動(dòng)時(shí)候報(bào)了728個(gè)錯(cuò)誤垢夹。。颖榜。并不清楚這會(huì)對(duì)整個(gè)項(xiàng)目的運(yùn)行產(chǎn)生什么影響棚饵。
結(jié)論
嘗試了不止以上兩種方法,想結(jié)合lint手動(dòng)刪除一部分但是因?yàn)橘Y源太多而且導(dǎo)致應(yīng)用完全跑不了而作罷掩完,也想查看其他人整理的工具但是發(fā)現(xiàn)只能運(yùn)行在eclipse上费薄。胳泉。。總而言之明刷,apk包是小了一點(diǎn),但是不知道會(huì)不會(huì)有什么副作用淌山,龐大項(xiàng)目的無(wú)用資源刪除并不像想象中那么簡(jiǎn)單幕随。
Android Studio發(fā)布Rease版本apk錯(cuò)誤 :app:packageRelease FAILED
java.io.IOException: Please correct the above warnings first.
如何解決這個(gè)問(wèn)題也很簡(jiǎn)單,編譯錯(cuò)誤提示已經(jīng)給除了參考地址http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass我在proguard-rules.pro這個(gè)文件了加了一行
-ignorewarnings
編譯就通過(guò)了,ORZ...