2014-02-27 27 views
0

我有一個企業應用程序,我手動部署(不使用Google Play),它使用一些.so庫進行映射(ArcGIS)。但是,libs文件夾中的.so文件(arm,armv7a,x86)將.apk大小從3mb擴展到21mb。我並不特別想要刪除.so文件中的一個(取消對該體系結構的支持),或者每個體系結構都有一個.apk文件。從.apk分離.so庫。

任何人都可以想到一種方式,我可以更新我的應用程序,而不包括每個更新.apk中的.so文件嗎?

回答

0

是的,您可以讓應用程序的Java部分手動將相應的.so文件下載到應用程序的內部存儲文件夾中,並將它們標記爲可執行文件。

然後,您將不得不使用System.load()和.so文件的完整路徑名(而不是System.loadLibrary())和修剪後的庫名加載它們。

這裏最大的問題是,你現在負責自己匹配ABI,更重要的是,提供自己的保護,防止被騙到安裝修改或冒名頂替的庫,這可能會在你的應用程序的名義上做一些邪惡的事情,使用它的權限。

當然,您必須確保在安裝它們之前不要嘗試調用任何本機方法。

你也可以考慮提供的.so文件作爲二進制資產在其各自的骨架的apk具有共享用戶ID(和匹配證書)作爲主要的apk

或者你可以簡單地讓特定平臺.apk的每個目標,只包含一個.so,並讓你的分發系統選擇正確的(儘管這對升級問題沒有幫助)。

+0

謝謝,將有一個在那 – user3330836

+0

去了你的第一個方法(保持.so使用System.load()分離和加載)。不幸的是,ArcGIS會在內部加載庫,所以即使我手動加載庫,當ArcGIS嘗試加載.so iteslf時,我仍會崩潰並刻錄。嘗試將.so複製到應用程序/設備lib文件夾,但沒有雪茄(只讀) – user3330836

+0

您可以製作一個小的虛擬文件夾(在每個ABI中)以供加載,或者您可以嘗試捕捉故障是致命的 - 它通常不是),或者你可以修改你擁有的這個庫的形式,即使它不是源代碼。 –