Java 在android中使用海绵城堡

Java 在android中使用海绵城堡,java,android,bouncycastle,Java,Android,Bouncycastle,嘿,我是java和android新手。试图和海绵城堡一起锻炼,但遇到了一些问题。我在post中尝试了解决方案,但仍然出现运行时错误“应用程序意外停止。请重试” 代码如下: import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Security;

嘿,我是java和android新手。试图和海绵城堡一起锻炼,但遇到了一些问题。我在post中尝试了解决方案,但仍然出现运行时错误“应用程序意外停止。请重试”

代码如下:

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Security;
import java.security.spec.ECGenParameterSpec;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

import org.spongycastle.jce.provider.BouncyCastleProvider;

public class MainActivity extends Activity {

static {
    //Security.addProvider(new BouncyCastleProvider());
    Security.insertProviderAt(new BouncyCastleProvider(), 1);
    }

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button generator= (Button) findViewById(R.id.key_pair_generator);
    generator.setOnClickListener(ECkeyPairGenerator);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

 private Button.OnClickListener ECkeyPairGenerator = new Button.OnClickListener()
    {
        public void onClick(View v) {
            try {
                ECGenParameterSpec ecParamSpec = new ECGenParameterSpec("secp224k1");
                KeyPairGenerator kpg = KeyPairGenerator.getInstance("ECDH","SC");// KeyPairGenerator.getInstance("ECDH","SC");
                kpg.initialize(ecParamSpec);

                KeyPair kpair=kpg.generateKeyPair();
                PublicKey pkey = kpair.getPublic();
                PrivateKey skey = kpair.getPrivate();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
           }
    };
}

当我运行调试器时,它会在语句“Security.insertProviderAt(new BouncyCastleProvider(),1);”处停止,并给出以下错误

Construct a new provider. This should only be required when using runtime registration of the provider using the Security.addProvider() mechanism.
我已经在JDK中添加了provider,但仍然没有用。请帮帮我

以下是日志:

11-22 18:07:21.744: E/dalvikvm(572): Could not find class 'org.spongycastle.jce.provider.BouncyCastleProvider', referenced from method com.example.testrsakeygeneration.MainActivity.<clinit>
11-22 18:07:21.804: W/dalvikvm(572): VFY: unable to resolve new-instance 639 (Lorg/spongycastle/jce/provider/BouncyCastleProvider;) in Lcom/example/testrsakeygeneration/MainActivity;
11-22 18:07:21.804: D/dalvikvm(572): VFY: replacing opcode 0x22 at 0x0000
11-22 18:07:21.804: D/dalvikvm(572): VFY: dead code 0x0002-0009 in Lcom/example/testrsakeygeneration/MainActivity;.<clinit> ()V
11-22 18:07:21.834: W/dalvikvm(572): Exception Ljava/lang/NoClassDefFoundError; thrown during Lcom/example/testrsakeygeneration/MainActivity;.<clinit>
11-22 18:07:21.855: W/dalvikvm(572): Class init failed in newInstance call (Lcom/example/testrsakeygeneration/MainActivity;)
11-22 18:07:21.864: D/AndroidRuntime(572): Shutting down VM
11-22 18:07:21.864: W/dalvikvm(572): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
11-22 18:07:21.934: E/AndroidRuntime(572): FATAL EXCEPTION: main
11-22 18:07:21.934: E/AndroidRuntime(572): java.lang.ExceptionInInitializerError
11-22 18:07:21.934: E/AndroidRuntime(572):  at java.lang.Class.newInstanceImpl(Native Method)
11-22 18:07:21.934: E/AndroidRuntime(572):  at java.lang.Class.newInstance(Class.java:1429)
11-22 18:07:21.934: E/AndroidRuntime(572):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
11-22 18:07:21.934: E/AndroidRuntime(572):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
11-22 18:07:21.934: E/AndroidRuntime(572):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-22 18:07:21.934: E/AndroidRuntime(572):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-22 18:07:21.934: E/AndroidRuntime(572):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-22 18:07:21.934: E/AndroidRuntime(572):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-22 18:07:21.934: E/AndroidRuntime(572):  at android.os.Looper.loop(Looper.java:123)
11-22 18:07:21.934: E/AndroidRuntime(572): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-22 18:07:21.934: E/AndroidRuntime(572): at java.lang.reflect.Method.invokeNative(Native Method)
11-22 18:07:21.934: E/AndroidRuntime(572):  at java.lang.reflect.Method.invoke(Method.java:521)
11-22 18:07:21.934: E/AndroidRuntime(572):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-22 18:07:21.934: E/AndroidRuntime(572):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-22 18:07:21.934: E/AndroidRuntime(572):  at dalvik.system.NativeStart.main(Native Method)
11-22 18:07:21.934: E/AndroidRuntime(572): Caused by: java.lang.NoClassDefFoundError: org.spongycastle.jce.provider.BouncyCastleProvider
11-22 18:07:21.934: E/AndroidRuntime(572):  at com.example.testrsakeygeneration.MainActivity.<clinit>(MainActivity.java:22)
11-22 18:07:21.934: E/AndroidRuntime(572):  ... 15 more
11-22 18:07:21.744:E/dalvikvm(572):找不到从方法com.example.testrsakeygeneration.MainActivity引用的类“org.spongycastle.jce.provider.BouncyCastleProvider”。
11-22 18:07:21.804:W/dalvikvm(572):VFY:无法解析Lcom/example/testrsakeygeneration/MainActivity中的新实例639(Lorg/spongycastle/jce/provider/BouncyCastleProvider;);
11-22 18:07:21.804:D/dalvikvm(572):VFY:在0x0000处替换操作码0x22
11-22 18:07:21.804:D/dalvikvm(572):VFY:Lcom/example/testrsakeygeneration/MainActivity;中的死代码0x0002-0009;。()V
11-22 18:07:21.834:W/dalvikvm(572):异常Ljava/lang/NoClassDefFoundError;在Lcom/example/testrsakeygeneration/MainActivity;期间引发;。
11-22 18:07:21.855:W/dalvikvm(572):类初始化在newInstance调用中失败(Lcom/example/testrsakeygeneration/MainActivity;)
11-22 18:07:21.864:D/AndroidRuntime(572):关闭虚拟机
11-22 18:07:21.864:W/dalvikvm(572):threadid=1:线程退出时出现未捕获异常(组=0x4001d800)
11-22 18:07:21.934:E/AndroidRuntime(572):致命异常:主
11-22 18:07:21.934:E/AndroidRuntime(572):java.lang.ExceptionInInitializeError
11-22 18:07:21.934:E/AndroidRuntime(572):在java.lang.Class.newInstanceImpl(本机方法)中
11-22 18:07:21.934:E/AndroidRuntime(572):在java.lang.Class.newInstance(Class.java:1429)上
11-22 18:07:21.934:E/AndroidRuntime(572):在android.app.Instrumentation.newActivity(Instrumentation.java:1021)
11-22 18:07:21.934:E/AndroidRuntime(572):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
11-22 18:07:21.934:E/AndroidRuntime(572):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-22 18:07:21.934:E/AndroidRuntime(572):在android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-22 18:07:21.934:E/AndroidRuntime(572):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-22 18:07:21.934:E/AndroidRuntime(572):在android.os.Handler.dispatchMessage(Handler.java:99)上
11-22 18:07:21.934:E/AndroidRuntime(572):在android.os.Looper.loop(Looper.java:123)
11-22 18:07:21.934:E/AndroidRuntime(572):位于android.app.ActivityThread.main(ActivityThread.java:4627)
11-22 18:07:21.934:E/AndroidRuntime(572):位于java.lang.reflect.Method.Invokenactive(本机方法)
11-22 18:07:21.934:E/AndroidRuntime(572):在java.lang.reflect.Method.invoke(Method.java:521)
11-22 18:07:21.934:E/AndroidRuntime(572):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-22 18:07:21.934:E/AndroidRuntime(572):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-22 18:07:21.934:E/AndroidRuntime(572):在dalvik.系统本地启动main(本地方法)
11-22 18:07:21.934:E/AndroidRuntime(572):由以下原因引起:java.lang.NoClassDefFoundError:org.spongycastle.jce.provider.BouncyCastleProvider
11-22 18:07:21.934:E/AndroidRuntime(572):位于com.example.testrsakeygeneration.MainActivity。(MainActivity.java:22)
11-22 18:07:21.934:E/AndroidRuntime(572):。。。还有15个

除了将库添加到Eclipse的构建路径之外,您还需要导出它们,以便将它们包含在应用程序中。转到项目的属性,选择
Java构建路径
,选择
订单和导出
选项卡,并确保已选中您的库。

请向我们显示堆栈跟踪。它提供了很多细节。我已经为logcat编辑了我的帖子。logcat说它找不到spongy castle,但我已经从buildpath添加了spongy castle所需的所有文件。可能出了什么问题??