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)

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/09/14 07:56:40
  • 終了:--

回答(2件)

id:mgoto No.1

mgoto回答回数12ベストアンサー獲得回数02004/09/15 11:43:39

ポイント25pt

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

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

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

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

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

id:kunitz

ありがとうございます!

JavaBlender

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

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

2004/09/15 11:59:46
id:urekat No.2

urekat回答回数12ベストアンサー獲得回数32004/09/15 12:57:33

ポイント25pt

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)

}

}

id:kunitz

ありがとうございます!

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

2004/09/15 13:44:40

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません