簡體   English   中英

在Android .aar庫中重新打包.jar-s

[英]Repackaging .jar-s in Android .aar library

源代碼

圖書館

使用圖書館的項目

問題描述

我正在使用.jar庫在該庫中編寫Android庫(.aar)。

在此輸入圖像描述

為了避免依賴重復,我使用ShadowJar插件進行重新打包,如下所示:

task shadowJar(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
    System.out.println("Relocating packages...")
    relocate 'retrofit'               , 'com.codecraft.retrofit'
    relocate 'org.simpleframework.xml', 'com.codecraft.org.simpleframework.xml'
    relocate 'com.squareup.okhttp'    , 'com.codecraft.com.squareup.okhttp'
}

在使用Android庫(.aar)的應用程序中,我具有下面顯示的庫的依賴性,僅用於測試我沒有依賴性重復問題。

dependencies {
    compile 'com.squareup.retrofit:retrofit:2.0.0-beta1'
    compile 'com.squareup.retrofit:converter-simplexml:2.0.0-beta1'
}

但是當我嘗試在Android上運行應用程序時,我遇到了以下錯誤

在此輸入圖像描述

錯誤:警告:忽略匿名內部類的InnerClasses屬性錯誤:(com.bea.xml.stream.util.CircularQueue $ 1)沒有出現Error:關聯的EnclosingMethod屬性。 這個類可能是由一個沒有以現代.class文件格式為目標的Error:編譯器生成的。 推薦的錯誤:解決方案是使用最新的編譯器錯誤從源代碼重新編譯類,而不指定任何“-target”類型選項。 忽略錯誤的結果:此警告是對此類的反射操作將錯誤地錯誤:指示它不是內部類。 錯誤:處理“javax / xml / XMLConstants.class”時出錯:錯誤:錯誤建議或錯誤使用核心類(java。*或javax。*)錯誤:未構建核心庫時。 錯誤:這通常是由於在使用IDE(例如Error:Eclipse)時無意中在應用程序的項目中包含了一個核心庫文件Error :. 如果你確定你不是故意定義一個Error:core class,那么這就是錯誤的最可能的解釋:繼續。 錯誤:但是,您實際上可能正在嘗試在核心Error:namespace中定義一個類,您可能已經采用了該類,例如,Error:來自非Android虛擬機項目。 這將是最大錯誤:肯定不起作用。 它至少會危害錯誤:您的應用程序與該平台的未來版本的兼容性。 錯誤:合法性通常也是有問題的。 錯誤:如果您真的打算構建一個核心庫 - 這只是錯誤:適合作為創建完整虛擬機的一部分錯誤:分發,而不是編譯應用程序 - 然后使用錯誤:“ - core-library “選項可以禁止顯示此錯誤消息。 錯誤:如果您繼續使用“--core-library”但實際上是錯誤:構建應用程序,那么請預先警告您的應用程序錯誤:在某些時候仍然無法構建或運行。 請錯誤:為憤怒的客戶做好准備,例如,他們發現您的錯誤:應用程序在升級其操作錯誤:系統后停止運行。 你應該為這個問題負責。 錯誤:如果您合法地使用恰好位於Error:core包中的某些代碼,那么最簡單的安全替代方法是Error:重新打包該代碼。 也就是說,將有問題的類移動到Error:您自己的包命名空間。 這意味着它們永遠不會出現錯誤:與核心系統類沖突。 JarJar是一個可以幫助錯誤的工具:你在這方面的努力。 如果你發現你不能這樣做,那么錯誤:這表明你所在的路徑最終會出錯:導致痛苦,痛苦,悲傷和悲傷。 錯誤:1錯誤; 中止:app:transformClassesWithDexForDebug FAILED錯誤:任務':app:transformClassesWithDexForDebug'的執行失敗。

com.android.build.api.transform.TransformException:java.lang.RuntimeException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:java.lang.UnsupportedOperationException

請注意 ,如果我只添加改進依賴項,則不會出現此問題

dependencies {
        compile 'com.squareup.retrofit:retrofit:2.0.0-beta1'
    } 

是什么原因以及如何解決這個錯誤?

當您在lib或app中包含Jars時 - 您可能包含已使用不同的java版本或使用與您的配置不同的配置編譯的文件,這可能會導致您遇到的問題。

我猜你使用的依賴項是指一個導致jar創建的問題的庫。

如果您不使用依賴項至關重要 - 請考慮下載您正在使用的lib的代碼(假設它們是開源的並且沒有法律限制)並使用您的應用程序將它們編譯為項目中的附加模塊,而不是添加jar 。 如果你這樣做 - 你應該考慮jmols寫的關於lib大小和方法計數的內容。

祝好運!

一些模塊的排除幫助我同樣的錯誤:

compile ('com.squareup.retrofit2:converter-simplexml:2.1.0'){
    exclude group: 'xpp3', module: 'xpp3'
    exclude group: 'stax', module: 'stax-api'
    exclude group: 'stax', module: 'stax'
}

來源鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM