說,一個Android應用程序使用的jar庫,當庫被指定爲依賴一切正常:Android的工作室:如何編譯定製類,但仍使用模塊依賴
dependencies {
...
...
compile 'org.example:example:1.1.1'
...
}
但是:需要調整org.example
代碼中的其中一個類。
一種方法是獲取源代碼並將所有這些文件放在java
文件夾中,然後刪除該模塊。當調整完成後,整個庫將被編譯。
另一種方法是對.jar
文件中的.class
文件進行調整,編譯和替換。
這兩種方法都有其缺點。
我的問題是:是否有更簡單的方法來調整庫中的代碼?
,當我試圖剛剛創建的包,放置在需要更換成java
文件夾中的類,我得到了一個錯誤:
Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files define Lorg/example/ClassNeedingChange;
如果有竅門能讓代碼Java文件夾我只是想知道重寫庫jar文件中的內容。
附加信息:
雖然上面具體沒有說明,需要的調整埋在圖書館和被庫的代碼中引用的類;我不直接打電話給他。對於需要調整的類是我的代碼(只有我的代碼)直接調用的類的簡單情況,那麼使用Java構造擴展類將是一件簡單的事情。但對於這個簡單的例子,我不需要發表這個問題。
「我只是想知道是否有一個技巧讓Java文件夾中的代碼覆蓋庫jar文件中的內容。」 - 從JAR文件中刪除類。雖然,恕我直言,唯一可維護的選項是子類路徑或分叉庫(「獲得源代碼...」),儘管我會把它放在項目的一個單獨的模塊中,而不是直接放在項目本身。 – CommonsWare
這樣做會使未來的維護成爲脖子上的痛苦。如果圖書館改變怎麼辦?你將不得不更新這個。你也可以在gradle中本地編譯它,並告訴gradle尋找本地版本,但是仍然會給出相同的維護問題。 – MaxPower
創建一個PR來反映lib的行爲,讓它達到你想要的行爲?那麼每個人都會受益。 – AutonomousApps