Vikten av en optimerad verktygskedja är ett av de hetaste ämnena i Android-utvecklingsvärlden. Många av er kanske har hört talas om GCC och Linaro, som är de två största projekten av den här typen. GCC är en gammal hand som ursprungligen släpptes 1987, medan Linaro är en relativt ung spelare bara fyra år gammal.
Låt oss först dyka in i historien om dessa två projekt. Som jag sa tidigare, GNU Compiler Collection är gammal. Under åren har den använts för att sammanställa olika projekt, inklusive Android. Google bestämde sig för att använda version 4.6 och 4.7 som sina standardverktygskedjor, och jag skulle vilja fokusera på version 4.7 i denna serie av tester.
Linaro lanserades 2010, och den har optimerats för ARM-arkitekturer. Och naturligtvis används ARM i de allra flesta Android-drivna smartphones och surfplattor. Du kan hitta Linaro som en verktygskedja som används för att kompilera kärnor eller hela ROM, och många utvecklare hävdar att denna verktygskedja är snabbare och kraftfullare än GCC.
Inspirerad av vår utvecklaradministratör Pulser_G2 bestämde jag mig för att ge den här myten ett försök och se om dessa påståenden är verkliga. För att göra detta laddade jag först ner AOSP-källan. Jag byggde en aosp_mako-eng mål för min Nexus 4 med standarduppsättningen förbyggda från Google. Efter göra otapackage, Jag har 183115481-byte zip-fil redo att flasha. Efter det laddade jag ner Linaro 4.7.4-verktygskedjan och ersatte GCC i prebuilts/gcc/linux-86. Jag gjorde de nödvändiga ändringarna för att ställa in nivå O3 för optimering. Eftersom AOSP endast stöder förbyggda kärnor (utan modifieringar), byggde jag en kärna på egen hand med Linaro och ersatte kärnan i mako-kärnan med min egen blob.
Nedan kan du se de två resulterande arkiven. Som du kan se är Linaro-arkivet något större, så den här verktygskedjan gör faktiskt något med bin- och xbin-mappar. Själva kärnfilen är också större.
Men filstorleken är inte det viktigaste. Låt oss istället fokusera på prestanda. För att mäta detta använde jag AnTuTu benchmark. För ökad precision körde jag varje test tre gånger. Som du kan se nedan är skillnaden ganska stor. Jag skulle dock inte ha för mycket blind tilltro till dessa tester, eftersom resultaten skilde sig åt på varje test. Som sagt, Linaro var några poäng bättre än GCC men AnTuTu är inte så pålitlig som du kanske tror.
GCC
Linaro
Följande tester utfördes med 3DMark för att se om en verktygskedja kan påverka grafikprestandan. Skillnaden var ännu mer signifikant än med Antutu. Du kan få få FPS med GCC, men den övergripande jämnheten är bättre med Linaro. Poängen är också lite högre.
GCC
Linaro
Det sista testet kördes med spelet Asphalt 8: Airborne. Nedan kan du se två videor av spelet som körs på båda verktygskedjorna. Den första gjordes med Linaro, medan den andra med GCC. Personligen tycker jag att Linaro känns lite smidigare än GCC, men det kan bara vara placeboeffekten eftersom detta inte var ett dubbelblindtest. Båda kärnorna var lager och fria från tweaks, överklockning och alla andra snygga tweaks för att förbättra prestandan.
//www.youtube.com/embed/BZRZenaNr9A
Så är Linaro bättre?
Även om jag var skeptisk till en början måste jag erkänna att Linaro verkar vara ett bättre val än GCC åtminstone på min hårdvarukonfiguration. OS kändes mer responsivt och snabbare än när det byggdes med GCC. GCC är dock fortfarande stenhård, så om du behöver ultimat stabilitet kan det fortfarande vara det bästa valet.
I nästa avsnitt ska jag försöka jämföra andra verktygskedjor som SaberMod och Linaro 4.8. Låt oss veta om dina favoritverktygskedjor i kommentarerna nedan. Och om du vill att vi testar några andra verktygskedjor, säg det!