人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

dojaでRetroGuardをかけた際以下のようなエラーが出ます。回避方法を教えてください。

C:¥eclipse¥workspace¥hogehoge>java -classpath .;C:¥retroguard-v1.1¥retroguard.
jar;C:¥iDKDoJa3.0¥lib¥classes.zip;C:¥iDKDoJa3.0¥lib¥doja_classes.zip RetroGuard
tempbld¥hogehoge.jar tempbld¥temp2.jar
Exception in thread ”main” java.lang.UnsatisfiedLinkError: getColorOfName0
at com.nttdocomo.ui.Graphics.getColorOfName0(Native Method)
at com.nttdocomo.ui.Graphics.<clinit>(Graphics.java:178)
at com.nttdocomo.ui.Frame.<clinit>(Frame.java:26)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at a.a.a.f.a(Unknown Source)

at a.a.a.s.a(Unknown Source)
at RetroGuard.a(Unknown Source)
at RetroGuard.a(Unknown Source)
at RetroGuard.main(Unknown Source)

●質問者: kunitz
●カテゴリ:コンピュータ
✍キーワード:.fr AT Class CLASSPATH eclipse
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● mgoto
●25ポイント

http://www.nttdocomo.co.jp/mc-user/i/java/tool_503i.html

iDK1.0〜iDK3.5 まで確認してみましたが、iDK2.0 以降では RetroGuard はうまく使えないようです。

対象アプリが DoJa1.0 で提供されているクラスのみを使用しているのであれば、

iDK1.0 を使用すれば RetroGuard を使用可能です。

なお iDK1.0 を使用する場合の classpath には、

classes.zip、doja_classes.zip ではなく dojaapi.jar を指定して下さい。

◎質問者からの返答

ありがとうございます!

JavaBlender

で行くことにしまいした。

なんかJavaBlenderより圧縮効率の良いの圧縮ツールがあったら教えてください。


2 ● urekat
●25ポイント

http://kpdus.tripod.com/jad.html

classes.zipとdoja_classes.zipの中のclassファイル内にnativeメソッドを使う部分があるのが原因らしいです。スタブのclassを作ってRetroGuardのクラスパスに設定してあげればOKです。

1、classファイルをjadでjavaにデコンパイル。

2、native関数からnativeを取る。空のメソッド本体をくっつける。

3、クラスパスに作ったスタブを指定してRetroGuardを実行。

下記はスタブを作るrubyプログラムです。

一部うまくいかない部分は手で修正してください。

# classes.zip -> classes

# doja_classes.zip -> doja_classes

# と展開しておく。

system(’rm -rf jad’)

system(’./jad.exe -r -d jad -s java classes/**/*.class’)

system(’./jad.exe -r -d jad -s java doja_classes/**/*.class’)

def removeNative(a)

if a =~ /(.*)native(.*)¥;/ then

b = ”#{$1} /*native*/ #{$2}{return”

ret = ”null”

if a =~ /¥[¥]¥s.*¥(/ then

ret = ”null”

elsif a =~ /boolean¥s.*¥(/ then

ret = ”false”

elsif a =~ /byte¥s.*¥(/ or a =~ /short¥s.*¥(/ or a =~ /int¥s.*¥(/ or a =~ /long¥s.*¥(/ then

ret = ”0”

elsif a =~ /void¥s.*¥(/ then

ret = ””

elsif a =~ /char¥s.*¥(/ then

ret = ”’¥0’”

end

a = ”#{b} #{ret};}”

elsif a =~ /(.*)native(.*)$/ then

puts ”??? #{a}”

end

a

end

Dir::glob(”./jad/**/*.java”).each {|f|

# puts ”#{f}: #{File::stat(f).size} bytes”

open(f,”r+”){|fd|

lines = fd.readlines

lines.each_with_index{|a,i|

# a[0,0] = (i+1).to_s + ”: ”

b = removeNative(a)

if a!=b then

p f

p a

p b

p ”-----------------”

end

lines[i] = b

}

fd.rewind

fd.print lines

fd.flush

fd.truncate(fd.pos)

}

}

◎質問者からの返答

ありがとうございます!

スタブのclassを作ってRetroGuardのクラスパスに設定してあげればOK

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ