2013-12-13 101 views
5

我已經實現了使用Xamarin的Android應用程序:如何減少封裝尺寸

.apk文件的大小是13.6MB有:

  • 配置:釋放
  • 鏈接:僅Sdk裝配
  • 支持體系結構 :armeabi,armeabi-V7A

下面是從編譯的apk採取的主要構成要素的大小的概述:

(這些是未壓縮尺寸,我未歸檔.apk文件到一個目錄並期待在文件Windows資源管理器):

  • classes.dex(1.23 KB)
  • 兩個libmonodroid.iso(armeabi + armeabi-V7A)(5.58 MB)
  • 所有Mono.xxx.dll(3.89 MB)
  • mscorlib.dll中(1.51 MB)
  • 所有System.xxx.dll(2.56 MB)

  • 我的應用程序組件(德羅伊德應用+一個PCL)(204 KB)

  • MvvmCross +插件(599 KB)
  • Xamarin ActionbarSherlock(348 KB)
  • ZXing.monoandroid(413 KB)
  • PCL Newtonsoft.Json(398 KB)
  • PCL Microsoft HTTP客戶端庫(System.Net.Http.dll)(110KB)

  • 「水庫」文件夾(尺寸:上盤451KB大小:816KB) - 因爲有些文件是1KB它們產生碎片,因此實際尺寸 VS 磁盤上尺寸是顯著不同

  • 所有PNG文件 (大小:325KB磁盤上的大小:磁盤上的496KB)

如何才能減小編譯後的.apk的大小?

我覺得它很大。

+3

您是否在.apk中包含任何圖標或閃屏? – joostmakaay

+0

其中一些庫是冗餘的Android的庫,如Newtonsoft.Json和System.Net.Http。 –

+0

@joostmakaay好問題;我更新了我的列表 –

回答

2

使用鏈接:Sdk +用戶程序集,並通過使用保留屬性標記類的困難過程(請參閱http://docs.xamarin.com/guides/ios/advanced_topics/linker/)。當你的應用程序在android日誌中崩潰時,你可以檢查哪個類缺失。它應該只是通過反射或使用IoC動態使用的類。

你也可以創建2個獨立的軟件包,一個只有armeabi(對於非常老的設備),一個使用armeabiv7a,另一個使用x86(目前你的應用只會在x86安卓設備上崩潰)。谷歌播放支持有3個獨立的軟件包具有不同的功能(不要忘記更改清單文件中的每個軟件包的功能)

+0

真棒的答案。我已經知道這些選項。第二個選項看起來很簡單,真正可行。但是第一個我不認爲這很容易。設想一個非常具體的類,它只能在應用中的特定時刻和場景中使用。需要徹底測試,並針對每個新功能或應用中所做的修改重複進行測試。在將您的評論標記爲答案之前,我會等一會兒。再次感謝 –

+0

我想知道爲什麼當使用Sdk +用戶組件時,鏈接器無法自己瞭解正在使用的類。如果它太多 –

+0

它知道正在使用的類,但不是動態加載或通過反射實例化的類。它不知道通過反射調用的方法。應用程序中不應該有太多內容。但是,確實,這是一個艱難的過程。 – Softlion