2016-07-09 10 views
0

jarファイルにappがあります。私はProGuardでそれをobfusticateしようとします。私ProGuardの設定ファイルでは私が追加しました:ProGuardを使って表明した後にjarが実行されない

-keep public class forms.Login{ 
    public static void main(java.lang.String[]); 
} 

obfustication後マッピングファイルが示していますforms.Login - > forms.Login:...無効メイン(java.lang.Stringで[]) - >メイン.. 。

私はpathToObfusticatedJar.jar forms.Login -cp私のアプリのJavaを実行しますが、私はエラーを取得:

Error: A JNI error has occurred, please check your installation and try again 
Exception in thread "main" java.lang.VerifyError: Expecting a stackmap frame at branch target 52 
Exception Details: 
    Location: 
    forms/Login.main([Ljava/lang/String;)V @0: invokestatic 
    Reason: 
    Expected stackmap frame at this location. 
    Bytecode: 
    0x0000000: b800 904c 2bbe 3d03 3e1d 1ca2 0026 2b1d 
    0x0000010: 323a 0412 0619 04b6 0093 b600 6499 000e 
    0x0000020: 1904 b600 92b8 0091 a700 0984 0301 a7ff 
    0x0000030: dba7 0050 4c12 0db6 0061 b800 68b2 003f 
    0x0000040: 012b b600 69a7 003c 4c12 0db6 0061 b800 
    0x0000050: 68b2 003f 012b b600 69a7 0028 4c12 0db6 
    0x0000060: 0061 b800 68b2 003f 012b b600 69a7 0014 
    0x0000070: 4c12 0db6 0061 b800 68b2 003f 012b b600 
    0x0000080: 69bb 0013 59b7 005a b800 5fb1 
    Exception Handler Table: 
    bci [0, 49] => handler: 52 
    bci [0, 49] => handler: 72 
    bci [0, 49] => handler: 92 
    bci [0, 49] => handler: 112 

     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
     at java.lang.Class.privateGetMethodRecursive(Unknown Source) 
     at java.lang.Class.getMethod0(Unknown Source) 
     at java.lang.Class.getMethod(Unknown Source) 
     at sun.launcher.LauncherHelper.validateMainClass(Unknown Source) 
     at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 

誰かが私が間違っているのかを説明するとても親切だろうか?私はproguardの設定を変更するか、何らかの形でcmdのmainメソッドを設定する必要がありますか? また、私は私のパブリック・スタティック・ボイドのメイン・メソッドを維持すると考えていますが、Proguardはそれを強調しています。どうして?どのようにそれはunchaged滞在するように?

+0

単にしないでください。 Fortune 100企業でも、JARを難読化しません。 – wilx

+0

リモートデータベースにログインとパスワードがあるので、何とかアプリケーションを保護したいと思っています。私は、ハイバネート設定を使用し、アプリ内でhibernate.connection.usernameとhibernate.connection.passwordがあります。 – JavaNewbie

+0

コード内にユーザー名とパスワードを格納する必要がある場合は間違っています。アプリケーションのユーザーにWebページを認証させ、ユーザー名とパスワードの代わりに使用するためのトークンを生成します。データベースに直接ではなく、いくつかのWeb APIを使用してデータを流す。 – wilx

答えて

1

Java 7以降でJavaアプリケーションを実行するときに必要なpreverificationが無効になっているようです。

設定を確認し、-dontpreverifyを削除してください。

関連する問題