2012-12-03 74 views
3

我已經在我的Android應用程序使用LGPL庫的一些問題:包括Java庫不.DEX文件

  1. 是否有可能有圖書館其他地方在我的apk - 不 的。 DEX文件?
  2. 如果我在同一個項目中創建一個服務,是.dex文件中的服務嗎?
  3. Android的應用程序可以包含apk中的多個.dex文件嗎?
  4. 有沒有辦法在安裝過程中自動安裝另一個apk(無需詢問用戶/不先搜索)?

感謝, 弗洛裏安

+0

一個很好的questiob!因爲lgpl不允許在dex文件中。一個很好的問題是,智能手機上是否允許使用lgpl lib? Lgpl庫必須可由最終用戶交換,而在商店的應用程序中則不是這樣。 – AlexWien

回答

1

不管法律地位(IANAL),我實在看不出這樣一個場景,你可以在技術上實現這一點。

據我所知,android應用程序中使用的Java庫必須同時提供給dx編譯器 apkbuilder,以使nixes#1。對dx的輸入還包括您編譯的aidl源文件,所以這對第二個是「是」。接下來,我相信在android應用程序中只能有一個classes.dex文件,所以#3已經不存在了。不知道#4(根據馬特沃爾夫的評論,這也是一個不)。希望可以幫助澄清的事情,運氣好的話...

參考: http://www.alittlemadness.com/2010/06/07/understanding-the-android-build-process/

+0

你不能在用戶的手機上安裝apk,我知道這一點。你可以在你自己的套件中捆綁另一個apk,當用戶啓動應用程序時將其卸載到外部存儲,然後提示他們安裝它(採取他們直接到安裝程序)。我們這樣做,它運作良好,用戶需要設置,以允許安裝非Play商店應用程序。 –

+0

這對於卸載第二個apk文件是有意義的,但仍然在編譯第二個apk文件,我相信你需要將你的Java庫提供給dx和apkbuilder。我並沒有試圖擊敗Florian試圖做的事情的可能性,但我的理解是平臺的限制不允許它(除了由於LGPL要求可能在法律灰色地帶的事實)。 –

+0

這個答案實際上是不正確的 - 它實際上可能有多個dex文件,如果不是直接的手段,那麼通過手動加載額外的文件。 –

1

如果不掩蓋LGPL庫Proguard的,最終用戶可以將您的APK至罐子,罐子提取,替換LGPL庫類,重新包裝jar,使用用戶生成的密鑰簽名,將jar轉換爲apk,然後將新的apk安裝到Android設備上。 droidtext project has an explanation page of this process.儘管這樣做很困惑,所以Quinn Bailey的回答還是比較好的。

編輯:我引用的wiki頁面是死了,因爲droidtext項目was shutdown due to licensing issues.如果你有wiki頁面我會很感激的本地副本。以下是重要的步驟列表我還記得:所以它被遮蔽排除整個LGPL庫包

  1. 開發人員應編輯Proguard的配置文件。 (How to stop proguard from obfuscating entire package?

  2. 用戶可解壓縮,修改,並通過使用工具,如apktooldex2jar重新包裝APK和它的內容。