0

An external jar file when used with normal Java application works fine, but when I use the same .jar file in android after putting in the /libs folder throws exceptions. The jar basically does encryption of values provided in a Map. The error log is as follows:

12-24 20:36:45.441: E/EncryptionUtils(31893): Could not read PublicKey 12-24 20:36:45.441: E/EncryptionUtils(31893): java.security.NoSuchProviderException: SunRsaSign 12-24 20:36:45.441: E/EncryptionUtils(31893): at >java.security.KeyFactory.getInstance(KeyFactory.java:108) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >in.verse.ipayy.crypto.EncryptionUtils.getPublicKey(Unknown Source) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >in.verse.ipayy.crypto.CryptoUtils.loadGlobalPublicKey(Unknown Source) 12-24 20:36:45.441: E/EncryptionUtils(31893): at in.verse.ipayy.crypto.CryptoUtils.(Unknown >Source) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >com.example.testencryption.Encryption.encrypt(Encryption.java:30) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >com.example.testencryption.MainActivity.onCreate(MainActivity.java:16) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >android.app.Activity.performCreate(Activity.java:5138) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2228) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2314) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >android.app.ActivityThread.access$600(ActivityThread.java:144) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >android.os.Handler.dispatchMessage(Handler.java:99) 12-24 20:36:45.441: E/EncryptionUtils(31893): at android.os.Looper.loop(Looper.java:150) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >android.app.ActivityThread.main(ActivityThread.java:5147) 12-24 20:36:45.441: E/EncryptionUtils(31893): at java.lang.reflect.Method.invokeNative(Native >Method) 12-24 20:36:45.441: E/EncryptionUtils(31893): at java.lang.reflect.Method.invoke(Method.java:511) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 12-24 20:36:45.441: E/EncryptionUtils(31893): at >com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 12-24 20:36:45.441: E/EncryptionUtils(31893): at dalvik.system.NativeStart.main(Native Method) 12-24 20:36:45.451: E/AndroidRuntime(31893): FATAL EXCEPTION: main 12-24 20:36:45.451: E/AndroidRuntime(31893): java.lang.ExceptionInInitializerError 12-24 20:36:45.451: E/AndroidRuntime(31893): at >com.example.testencryption.Encryption.encrypt(Encryption.java:30) 12-24 20:36:45.451: E/AndroidRuntime(31893): at >com.example.testencryption.MainActivity.onCreate(MainActivity.java:16) 12-24 20:36:45.451: E/AndroidRuntime(31893): at >android.app.Activity.performCreate(Activity.java:5138) 12-24 20:36:45.451: E/AndroidRuntime(31893): at >android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 12-24 20:36:45.451: E/AndroidRuntime(31893): at >android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2228) 12-24 20:36:45.451: E/AndroidRuntime(31893): at >android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2314) 12-24 20:36:45.451: E/AndroidRuntime(31893): at >android.app.ActivityThread.access$600(ActivityThread.java:144) 12-24 20:36:45.451: E/AndroidRuntime(31893): at >android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 12-24 20:36:45.451: E/AndroidRuntime(31893): at >android.os.Handler.dispatchMessage(Handler.java:99) 12-24 20:36:45.451: E/AndroidRuntime(31893): at android.os.Looper.loop(Looper.java:150) 12-24 20:36:45.451: E/AndroidRuntime(31893): at >android.app.ActivityThread.main(ActivityThread.java:5147) 12-24 20:36:45.451: E/AndroidRuntime(31893): at java.lang.reflect.Method.invokeNative(Native >Method) 12-24 20:36:45.451: E/AndroidRuntime(31893): at java.lang.reflect.Method.invoke(Method.java:511) 12-24 20:36:45.451: E/AndroidRuntime(31893): at >com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 12-24 20:36:45.451: E/AndroidRuntime(31893): at >com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 12-24 20:36:45.451: E/AndroidRuntime(31893): at dalvik.system.NativeStart.main(Native Method) 12-24 20:36:45.451: E/AndroidRuntime(31893): Caused by: java.lang.NullPointerException 12-24 20:36:45.451: E/AndroidRuntime(31893): at >in.verse.ipayy.crypto.CryptoUtils.loadGlobalPublicKey(Unknown Source) 12-24 20:36:45.451: E/AndroidRuntime(31893): at in.verse.ipayy.crypto.CryptoUtils.(Unknown >Source) 12-24 20:36:45.451: E/AndroidRuntime(31893): ... 16 more

Please point out where am I going wrong...

2 Answers 2

1

Look, Android uses slightly different virtual machine (Dalvik) which uses different bytecode format than usual Sun's (Oracle's) bytecode. In practice that means that before packing into final APK original Sun's jar library should be translated to Dalvik's bytecodes. If jar contains nothing unusual (like references to unknown libraries or to native code) - it works fine. But not in your case.

Looks like that your jar uses some code which is unavailable under Android - most likely it's Sun's specific java.security package.

Here's prooflink which shows that in Android there's no such class as java.security.NoSuchProviderException

Sign up to request clarification or add additional context in comments.

1 Comment

I solved it. I used a different library meant for the android platform. it worked!!
1

The library you are trying to use is not meant for android.

For android, please use the jar from https://developers.ipayy.com/making-a-payment-android This jar is optimized for android and has additional functionality to auto read the OTP (provide you have permissions in AndroidManifest.xml).

1 Comment

but the thing is I need my own activities rather than webviews provided by ipayy

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.