2010-05-20 67 views
1

我試圖使用proguard對Java MIDlet進行混淆。它在PC上運行正常,但是,當我在手機上運行它時,程序打開,連接到服務器,然後凍結。如果我禁用混淆處理,它會在手機上再次運行。我嘗試了應用程序的所有混淆級別(NetBeans中的7,8和9),並且它們中的任何一個似乎都不能正常工作,並且我無法發佈此應用程序以供商業用途使用,不會造成混淆。此外,編譯器會引發一些警告:混淆(proguard)是否會導致MIDlet出現故障?

Note: duplicate definition of library class [java.io.ByteArrayOutputStream] 
Note: there were 14 duplicate class definitions. 

但是我不知道這是否是真正的問題。有誰知道什麼是錯的?混淆器參數如下:

Obfuscator Arguments (7): 
    -dontusemixedcaseclassnames 
    -default package '' 
    -keep public class ** { 
     public *; 
    } 

Obfuscator Arguments (8): same as (7) plus -overloadaggressively. 

Obfuscator Arguments (9): same as (8) but 
    -keep public class ** extends javax.microedition.midlet.MIDlet { 
     public *; 
    } 
instead. 

謝謝。

回答

1

混淆會破壞內容。如果沒有盆栽示例代碼,很難確切地說出可能的錯誤。 可能出錯的一個例子是,如果您通過名稱在代碼中加載類 - 混淆的類將具有不同的名稱,因此將不會被找到。

您提到的消息could be indicative of the problem - 您必須在路徑上多次使用這些類。 您提到的那類與您遇到問題的連接有關嗎?仔細查看正在使用的罐子,並確保您的應用程序中包含正確(和最低)的類別集合。 CLDC中的ByteArrayOutputStream與桌面JDK中的不一樣。

+0

是的,我知道沒有代碼很難找到問題,但我沒有任何ideia代碼的一部分導致這一點,因爲系統中有很多類,我不能粘貼所有這些。 Im顯示了警告的最後2行,因爲這些類看起來太泛泛,給了我一個錯誤在哪裏的提示,例如:注意:庫類[javax.microedition.media.control.VolumeControl]的重複定義,而且我的應用程序甚至沒有聲音或任何媒體類型......如果有某種外部呼叫可能導致此問題,請正確指出,謝謝。 – eMgz 2010-05-20 21:35:34

+0

@eMgz - 是否有可能把代碼燒到一個非常短的代碼片段展現相同的凍結? (可能幫助你回到問題上,即使發佈的代碼太多。) – 2010-05-20 22:00:55

+0

我不這麼認爲,有很多類來處理記錄存儲,連接,線程,圖像等,但我試圖使用-keep選項逐個調試。不管怎麼說,還是要謝謝你。 – eMgz 2010-05-21 20:14:24