0

私は現在、Androidでデジタル署名アプリを開発しています。

しかし、Eclipseが次のメッセージを表示するため、apkファイルを作成できませんでした

[2013-01-27 20:43:25-BlowfishCipher] Dx予期しないトップレベルの例外: java.lang.IllegalArgumentException:すでに追加されています:Lorg / bouncycastle / Mozilla / SignedPublicKeyAndChallenge;

[2013-01-27 20:43:25-BlowfishCipher] Dx at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)[2013-01-27 20:43:25-BlowfishCipher] com.android.dx.dex.file.DexFile.add(DexFile.java:163)のDx

エラーメッセージが重複したjarファイルを示していることは知っていますが、重複したjar(Lorg / bouncycastle / Mozilla / SignedPublicKeyAndChallenge;)が弾力のあるcaslteライブラリのコアファイルであるため、解決方法がわかりません。

次のJavaコードは構文エラーを示しませんが、java.lang.IllegalArgumentExceptionが発生します:すでに追加された例外

package exam.blowfishcipher;

import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.security.KeyPair;
import java.security.SecureRandom;
import javax.security.auth.x500.X500Principal;
import org.bouncycastle.jce.PKCS10CertificationRequest;
import org.bouncycastle.openssl.PEMWriter;
import android.os.Environment;
import chapter6.PKCS10ExtensionExample;



public class PKCS10Generater
{
    public static PKCS10CertificationRequest generateRequest(
            KeyPair pair)
            throws Exception

            {           
             return new PKCS10CertificationRequest(
                     "SHA256withRSA",
                     new X500Principal("CN=Test CA Certificate"),
                     //new X500Principal("CN=end"),
                     pair.getPublic(),
                     null,
                     pair.getPrivate());
            }

    public static void pemEncodeToFile(String filename, Object obj, char[] password)     throws Exception{
        PEMWriter pw = new PEMWriter(new FileWriter(filename));
           if (password != null && password.length > 0) {
               pw.writeObject(obj, "DESEDE", password, new SecureRandom());
           } else {
               pw.writeObject(obj);
           }
           pw.flush();
           pw.close();
    }

    public static void reqGen() throws Exception
    {
        //create the keys
        /*
        KeyPairGenerator kpGen = KeyPairGenerator.getInstance("RSA", "BC");
        //KeyPairGenerator kpGen = KeyPairGenerator.getInstance()

        kpGen.initialize(512, chapter4.Utils.createFixedRandom());

        KeyPair pair=kpGen.generateKeyPair();
        */
        //PKCS10CertificationRequest request = generateRequest(pair);

        KeyPair pair = chapter8.Utils.generateRSAKeyPair();
        PKCS10CertificationRequest request = PKCS    10ExtensionExample.generateRequest(pair);


        pemEncodeToFile(Environment.getExternalStorageDirectory()+"pkcs10.req",     request, null);
        PEMWriter pemWrt = new PEMWriter( new OutputStreamWriter(System.out));
        pemWrt.writeObject(request);
        pemWrt.close();     
    }


}
4

1 に答える 1

1

AndroidにはすでにBouncyCastleがシステムに含まれているため、再度追加しようとするとエラーが発生します(最近のバージョンでは、実際に含まれcom.android.org.bouncycastleているため、理論的にはエラーが発生しないはずです)。プロジェクトに含める場合は、BCのパッケージの名前を変更する必要があります(jarjarなどを使用)。すでにこれを行っているプロジェクトの1つは、SpongyCastleです。通常のBCjarの代わりにそれを使用してみてください。

https://github.com/rtyley/spongycastle

于 2013-01-28T02:07:57.107 に答える