I am using this plugin https://pub.dev/packages/razorpay_flutter
Razorpay crashes on the payment page
flutter run
is working fine in the emulator and real device.
but after flutter build apk
, the app Crashed on _razorpay.open(options);
and the plugin is not showing a crash report or any error in the visual studio code terminal.
final _razorpay = Razorpay();
_razorpay.on(Razorpay.EVENT_PAYMENT_SUCCESS, _handlePaymentSuccess);
_razorpay.on(Razorpay.EVENT_PAYMENT_ERROR, _handlePaymentError);
_razorpay.on(Razorpay.EVENT_EXTERNAL_WALLET, _handleExternalWallet);
var options = {
'key': 'rzp_test_xxxxxxx',
'amount': 100, //in the smallest currency sub-unit.
'name': 'Acme Corp.',
'description': 'Fine T-Shirt',
'prefill': {'contact': '9123456789', 'email': 'test.kumar@example.com'}
};
print('0');
try {
print('1');
_razorpay.open(options);
print('2');
} catch (e) {
print('error');
debugPrint(e);
}
in the visual studio code terminal
11-05 00:22:29.197 21170 21209 I flutter : 0
11-05 00:22:29.197 21170 21209 I flutter : 1
11-05 00:22:29.197 21170 21209 I flutter : 2
In the Andoid studio logcat
java.lang.ClassNotFoundException: Didn't find class "com.razorpay.d__1_"
2019-11-05 11:59:49.168 30159-30159/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.my_task, PID: 30159
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.my_task/com.razorpay.CheckoutActivity}:
java.lang.ClassNotFoundException: Didn't find class "com.razorpay.d__1_" on path: DexPathList[[zip file "/data/app/com.example.my_task-OX9pWhAo1dl4QP0DQBF58w==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.my_task-OX9pWhAo1dl4QP0DQBF58w==/lib/arm64, /data/app/com.example.my_task-OX9pWhAo1dl4QP0DQBF58w==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.razorpay.d__1_" on path: DexPathList[[zip file "/data/app/com.example.my_task-OX9pWhAo1dl4QP0DQBF58w==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.my_task-OX9pWhAo1dl4QP0DQBF58w==/lib/arm64, /data/app/com.example.my_task-OX9pWhAo1dl4QP0DQBF58w==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.razorpay.Y_$B$.Q_$2$(:1112)
at java.lang.reflect.Method.invoke(Native Method)
at com.razorpay.A.<clinit>(:204)
at com.razorpay.A.a(Unknown Source:0)
at com.razorpay.c.b(:189)
at com.razorpay.h.b(:412)
at com.razorpay.ja.onCreate(:82)
at com.razorpay.u.onCreate(:23)
at com.razorpay.CheckoutActivity.onCreate(:8)
at android.app.Activity.performCreate(Activity.java:7183)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
I just following below steps for this solution.
1 step
make a file name of proguard-rules.pro inside android>app
that should be : android/app/proguard-rules.pro
inside proguard-rules file add below lines
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
-keepattributes JavascriptInterface
-keepattributes *Annotation*
-dontwarn com.razorpay.**
-keep class com.razorpay.** {*;}
-optimizations !method/inlining/*
-keepclasseswithmembers class * {
public void onPayment*(...);
}
2 step
go to android>app>build.gradle and find buildTypes
inside buildTypes>release add some lines
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
now Razorpay is working.