3

我正在使用多個庫,如google play service,retrofit,gson,glide,twitter和facebook sdk的項目中工作。所以我想知道每個庫的確切大小在我的應用程序中佔有。請幫助我是否有任何可能的方式來分析Android Studio中的大小。任何有關我的要求的工具建議或提示都會對我非常有幫助。我正在發佈我在build.gradle中使用的依賴關係,如下所示。如何計算在Android項目中作爲依賴項添加的庫的大小

compile('com.twitter.sdk.android:twitter:[email protected]') { 
     transitive = true; 
    } 
compile 'com.android.support:appcompat-v7:23.2.1' 
compile 'org.twitter4j:twitter4j-core:4.0.2' 
compile 'com.github.bumptech.glide:glide:3.6.1' 
compile 'com.google.android.gms:play-services-gcm:8.4.0' 
compile 'com.android.support:support-v4:23.2.0' 

注意:我爲了通過去除佔用多少內存庫來降低我的應用的apk大小分析這份報告。

過去幾天我完全停留在這個解決方案中。我甚至搜索了很多,我找不到優化的方法來計算我的項目中圖書館的確切大小用法。

請幫忙。提前致謝。

+1

那麼,一旦它們在您的應用程序中,所有庫都會與您的APK合併,因此很難將它們分開。您可以查看JAR或AAR文件的大小,以及傳遞相關性的大小,以獲得粗略估計。例如,[Glide似乎是〜465KB](http://mvnrepository.com/artifact/com.github.bumptech.glide/glide/3.6.1),而「support-v4:23.2.1」是〜1.2 MB(加上另外~19KB的「support-annotations」依賴)。 – CommonsWare

+0

您可以一次添加一個依賴項到一個完全裸露的Android項目,生成一個APK,並計算每個的差異。 – fractalwrench

+0

@fractalwrench那很好。但是,這將是一個乏味的過程,你必須一次又一次地構建項目。 – Chandru

回答

3

不知道這是你正在尋找的東西,但可能以某種方式幫助:

task depsize { 
    doLast { 
     final formatStr = "%,10.2f" 
     final conf = configurations.default 
     final size = conf.collect { it.length()/(1024 * 1024) }.sum() 
     final out = new StringBuffer() 
     out << 'Total dependencies size:'.padRight(45) 
     out << "${String.format(formatStr, size)} Mb\n\n" 
     conf.sort { -it.length() } 
      .each { 
       out << "${it.name}".padRight(45) 
       out << "${String.format(formatStr, (it.length()/1024))} kb\n" 
      } 
     println(out) 
    } 
} 

任務打印出所有依賴的總和,並打印出來,大小以KB爲單位,按大小降序排序。

+0

嗨@medvedev。謝謝你的回答。我正在尋找同樣的東西。我在build.gradle(app)中插入了這段代碼,但它沒有在日誌中打印任何內容。還試圖在build.gradle(project)中複製這些內容。 – Chandru

+0

這很奇怪。我從我的build.gradle複製了這段代碼。 爲了獲得輸出,我執行「gradle depsize」 –

+0

但是,它適用於我的非Android版本。沒有嘗試用android。對不起。 –

3
task (depsize) << { 
def size = 0; 
configurations._debugApk.collect { it.length()/(1024 * 1024) }.each { size += it } 
println "Total dependencies size: ${Math.round(size * 100)/100} Mb" 

configurations 
     ._debugApk 
     .sort { -it.length() } 
     .each { println "${it.name} : ${Math.round(it.length()/(1024) * 100)/100} kb" } 
} 

試着把它放在你的應用程序模塊gradle.build中,然後你可以通過gradle直接運行。如果你想看到所有posissible configuratuions補充:

configurations 
     .findAll() 
     .each { println "${it.name}" } 
+0

感謝您的回覆。你可以讓我知道在哪裏添加這個。一旦完成,我會接受答案,這樣對那些全都在尋找這個要求的人來說會非常有幫助。 – Chandru

+0

我已經更新了我的答案......你可以把它放在你的應用程序模塊gradle.build的末尾 – David

3

最簡單方法是使用一種稱爲http://www.methodscount.com/網站,你只需粘貼編譯語句,你會得到關於它的所有大小的詳細信息。

例如,如果我com.github.paolorotolo粘貼:appintro:4.1.0到它,然後我得到這樣的結果:

enter image description here

它不會爲一些庫,但對於大多數工作的情況下,它是它的工作。

相關問題