Novice
Novice

Reputation: 557

external jar file working with java application but not in android application

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...

Upvotes: 0

Views: 207

Answers (2)

Vishal Dhawani
Vishal Dhawani

Reputation: 267

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).

Upvotes: 1

Barmaley
Barmaley

Reputation: 16363

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

Upvotes: 1

Related Questions