JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java ME、Google Android 平台與 JavaCard 討論區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [問題] 使用混淆器混淆過的檔案載入時出現 "ALERT: Unable to load class A" [精華]
paservan





發文: 11
積分: 3
於 2004-09-22 22:08 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
大家好, 小弟目前正在測試 混淆器 的功能, 但是遇到了奇怪的問題。

我使用的混淆器 : Proguard 3.0.7
我使用的 NOKIA 模擬器 : Series_60_MIDP_SDK_2_1_Beta
我使用的開發平台 : Eclipse

我把我寫好的檔案用一般包裝 ( 不經過混淆器 ) 都可以在 NOKIA 的模擬器上面跑, 但是我把我寫好的檔案, 經過混淆器混淆之後, 再用 NOKIA 的模擬器跑, 卻出現了 "ALERT: Unable to load class A" 的錯誤訊息..

請教各位大大有遇過類似的問題嗎 ?

還有在使用混淆器的時候,有沒有什麼注意事項呢?

謝謝


reply to postreply to post
作者 Re:[問題] 使用混淆器混淆過的檔案載入時出現 "ALERT: Unable to load class A" [Re:paservan]
paservan





發文: 11
積分: 3
於 2004-09-23 14:23 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
後來我繼續追蹤,看到混淆器使用的 MAP.TXT 檔案。這各檔案就是當混淆器混淆完畢後會產生的一各 TXT 檔案,發現了一各問題。由於我的檔案挺多的,混淆器從 a 編到 z, 在編到 A ( 總 total 是 27 個 ),但是我用 RAR 解開混淆器所混淆之後的 .JAR 檔案, 發現怎麼沒有 A.class ( 小寫的 a.class 有,但是大寫的 A.class 卻不在 .JAR 檔案中 ) 難怪會出現 "Unable to load class A" 這個問題( A.class 根本就不存在)。

但是怎麼會發生這種問題呢?混淆器混淆完畢之後竟然沒有將檔案放進 .JAR 檔中!( MAP.TXT 裡面有記錄著 xxx -> A : )

可否請知道問題的高手能夠回復一下,感謝!


reply to postreply to post
作者 Re:[問題] 使用混淆器混淆過的檔案載入時出現 "ALERT: Unable to load class A" [Re:paservan]
moliwang

用嘴巴打嘴炮比用鍵盤打嘴炮要來的務實

版主

發文: 1215
積分: 6
於 2004-09-23 16:22 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
要不要用RetroGuard看看,會不會有一樣的問題呀?

paservan wrote:
後來我繼續追蹤,看到混淆器使用的 MAP.TXT 檔案。這各檔案就是當混淆器混淆完畢後會產生的一各 TXT 檔案,發現了一各問題。由於我的檔案挺多的,混淆器從 a 編到 z, 在編到 A ( 總 total 是 27 個 ),但是我用 RAR 解開混淆器所混淆之後的 .JAR 檔案, 發現怎麼沒有 A.class ( 小寫的 a.class 有,但是大寫的 A.class 卻不在 .JAR 檔案中 ) 難怪會出現 "Unable to load class A" 這個問題( A.class 根本就不存在)。

但是怎麼會發生這種問題呢?混淆器混淆完畢之後竟然沒有將檔案放進 .JAR 檔中!( MAP.TXT 裡面有記錄著 xxx -> A : )

可否請知道問題的高手能夠回復一下,感謝!


reply to postreply to post
作者 Re:[問題] 使用混淆器混淆過的檔案載入時出現 "ALERT: Unable to load class A" [Re:paservan]
paservan





發文: 11
積分: 3
於 2004-11-23 13:47 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我找到原因了,是作業系統的原因,在 proguard 的預設中,當要進行混淆的檔案超過 26 個時, 前面 26 個會從 a 編到 z,但是第 27 個會編成 A ( 大寫的 A )。在我們常用的微軟的作業系統 a.class 和 A.class 是視為一樣的, 所以會把 用 A.class 把 a.class 覆蓋掉, 因此就會出現 "Unenable to load class A"。

解決的方法其實在 Proguard 的網站上面有公佈,就是在混淆的時候加上一個參數就解決了,相當簡單,下面是我從他們的網站上面剪貼下來的,供大家參考。

1
2
3
4
5
6
7
8
9
10
11
12
-dontusemixedcaseclassnames 
    Specifies not to generate mixed-case class names while obfuscating. By
default, obfuscated class names can contain a mix of upper-case
characters and lower-case characters. This creates perfectly acceptable
and usable jars. Only if a jar is unpacked on a platform with a
case-insensitive filing system (say, Windows), the unpacking tool may let
similarly named class files overwrite each other. Code that self-destructs
when it's unpacked! Developers who really want to unpack their jars on
Windows can use this option to switch off this behavior. Note that the
obfuscated jars will become larger as a result. Only applicable when
obfuscating. 
 


ps. 到底是 a.class 存在還是 A.class 存在,我已經忘記了,畢竟已經經過一段時間了,請見諒,但是確定是因為作業系統而產生的覆蓋問題。


reply to postreply to post
作者 Re:[問題] 使用混淆器混淆過的檔案載入時出現 "ALERT: Unable to load class A" [Re:paservan]
atticcat

There is no cookie



發文: 702
積分: 4
於 2005-02-03 09:48 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
paservan wrote:
我找到原因了,是作業系統的原因,在 proguard 的預設中,當要進行混淆的檔案超過 26 個時, 前面 26 個會從 a 編到 z,但是第 27 個會編成 A ( 大寫的 A )。在我們常用的微軟的作業系統 a.class 和 A.class 是視為一樣的, 所以會把 用 A.class 把 a.class 覆蓋掉, 因此就會出現 "Unenable to load class A"。

解決的方法其實在 Proguard 的網站上面有公佈,就是在混淆的時候加上一個參數就解決了,相當簡單,下面是我從他們的網站上面剪貼下來的,供大家參考。

ps. 到底是 a.class 存在還是 A.class 存在,我已經忘記了,畢竟已經經過一段時間了,請見諒,但是確定是因為作業系統而產生的覆蓋問題。


沒錯..我也是在Windows系統上遇到這個問題..就是大寫檔跟小寫檔被重覆的問題..
加了-dontusemixedcaseclassnames 就可以解決了...

混淆真是太神奇了....
除了提供程式碼的保護外..
在J2ME更是達到縮小size的神奇功效..
沒有混淆的話...我寫的大多程式是放不上真的手機地...Smile


reply to postreply to post
作者 Re:[問題] 使用混淆器混淆過的檔案載入時出現 "ALERT: Unable to load class A" [Re:atticcat]
julymaster





發文: 31
積分: 0
於 2005-05-15 00:17 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我是用WTK2.2 想要加入 參數 -dontusemixedcaseclassnames
因呼叫 ProGuard 混淆器時是包在ktools.zip 裡面..
故做 一個 xxx.pro 的 scriptfile .
但不知為何沒有用 呼叫到 -dontusemixedcaseclassnames .
請各位大大解惑.
參考如下
=============================================
Solutions / Workarounds

There are three solutions to the problem:

The quickest, although perhaps not the easiest, solution is simply to use a file system that is case-sensitive, and thus treats a.class and A.class as different files.

The second solution is to customize the obfuscation phase of the J2ME Wireless Toolkit build process. This solution assumes you are using both the J2ME Wireless Toolkit and the Proguard obfuscation engine.

To get a complete build that includes obfuscation:

Create a ProGuard script. You can seed its contents with those of the existing script file, found in the MIDlet suite's base directory, with a name in the form MIDletSuiteName.pro. The toolkit creates this file whenever you choose the menu option Project -> Package -> Create Obfuscated Package.
Add to the file the ProGuard directive -dontusemixedcaseclassnames.
Save the Proguard script as filename in the base directory of the MIDlet suite.
Add the following property to the toolkit-dir\wtklib\Windows\ktools.properties file:
obfuscate.script.name: filename
Now whenever you include obfuscation in the build cycle the toolkit will look for the ProGuard script filename in the MIDlet suite base directory. If the script is absent the toolkit will create and use a default script called MIDletSuiteName.pro.

The third solution is to refactor the namespace of the application, and reduce the number of classes in any package to 26 or fewer.
============================================================
安裝 ProGuard 之後,只要選擇 [專案] > [封裝] > [建立模糊化封裝] 即可開始使用。

在某些狀況下,您必須提供控制混淆器運作方式的程序檔檔案。例如,如果是用 Class.forName() 載入類別,您必須告訴 ProGuard 不要變更類別名稱。

請用文字編輯器建立程序檔檔案,然後儲存在專案的主目錄下。如需程序檔檔案的資訊,請參閱 ProGuard 的說明文件。接下來,您必須告訴工具箱如何找到此檔案。若要執行此動作,請編輯 {toolkit}\wtklib\{platform}\ktools.properties,{platform} 為基礎平台的名稱 (最可能為 Windows 或 Linux)。新增底下這一行:

obfuscate.script.name:scriptfile

用您使用的程序檔檔案名稱取代 "scriptfile"。您必須離開 KToolbar 再重新啟動,讓變更生效。

J2ME Wireless Toolkit 也包括 RetroGuard 的支援。如果要使用 RetroGuard,您必須另外下載此程式,並變更工具箱的配置。

移至 RetroGuard 網站 http://www.retrologic.com/retroguard-main.html。
下載最新版本。
從下載的 zip 檔,將 retroguard.jar 檔案解壓縮到 J2ME Wireless Toolkit 安裝的 bin 目錄中。
編輯 {toolkit}\wtklib\{platform}\ktools.properties,讓它使用 RetroGuard 混淆器外掛程式:
obfuscator.runner.class.name:com.sun.kvem.ktools.RunRetro
obfuscator.runner.classpath:wtklib\\ktools.zip

當您建立模糊化封裝時,將會使用 Retroguard。

若要切換回 ProGuard,請依下列方式編輯 ktools.properties 檔案中的混淆器行:

obfuscator.runner.class.name:com.sun.kvem.ktools.RunPro
obfuscator.runner.classpath:wtklib\\ktools.zip


reply to postreply to post
作者 Re:[問題] 使用混淆器混淆過的檔案載入時出現 "ALERT: Unable to load class A" [Re:julymaster]
julymaster





發文: 31
積分: 0
於 2005-05-27 22:30 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
有沒人知道WTK2.2怎麼加 -dontusemixedcaseclassnames 之參數

reply to postreply to post
» JWorld@TW »  Java ME、Google Android 平台與 JavaCard 討論區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8