RxPermission 在发布模式下导致内部错误
RxPermission causes Internal Error in release mode
我使用 RxPermission 库轻松处理运行时权限,
在我的应用程序中,我要求位置:
rxPermissions
.request(Manifest.permission.ACCESS_FINE_LOCATION)
.subscribe(granted -> {
if (granted) {
boolean gpsEnabled, networkEnabled;
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (locationManager != null) {
gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
networkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (gpsEnabled && locationListenerGPS != null) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0L, 0f, locationListenerGPS);
}
if (networkEnabled && locationListenerNetwork != null) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0L, 0f, locationListenerNetwork);
}
}
} else {
Log.d("Access not granted", "no location");
}
});
当我打开 debug-apk 时,它工作得很好,但是当我尝试打开 release apk 时,它崩溃并出现以下错误:
FATAL EXCEPTION: main
Process: com.magis.icbc, PID: 19522
java.lang.InternalError
at d.c.d.b.s.a(UnsafeAccess.java:115)
at d.c.d.b.r.(SpscArrayQueue.java:42)
at d.c.a.d$c.(OnSubscribeConcatMap.java:129)
at d.c.a.d.a(OnSubscribeConcatMap.java:82)
at d.c.a.d.a(OnSubscribeConcatMap.java:42)
at d.d.a(Observable.java:10142)
at d.c.a.k$e.a(OperatorMerge.java:248)
at d.c.a.k$e.b(OperatorMerge.java:148)
at d.c.a.h$a.b(OnSubscribeMap.java:77)
at d.c.a.k$e.a(OperatorMerge.java:511)
at d.c.a.k$e.a(OperatorMerge.java:466)
at d.c.a.k$e.a(OperatorMerge.java:244)
at d.c.a.k$e.b(OperatorMerge.java:148)
at d.c.a.e$a.a(OnSubscribeFromArray.java:76)
at d.c.a.e$a.a(OnSubscribeFromArray.java:58)
at d.i.a(Subscriber.java:211)
at d.c.a.e.a(OnSubscribeFromArray.java:32)
at d.c.a.e.a(OnSubscribeFromArray.java:24)
at d.c.a.g.a(OnSubscribeLift.java:48)
at d.c.a.g.a(OnSubscribeLift.java:30)
at d.d.a(Observable.java:10142)
at d.c.a.h.a(OnSubscribeMap.java:48)
at d.c.a.h.a(OnSubscribeMap.java:33)
at d.c.a.g.a(OnSubscribeLift.java:48)
at d.c.a.g.a(OnSubscribeLift.java:30)
at d.c.a.g.a(OnSubscribeLift.java:48)
at d.c.a.g.a(OnSubscribeLift.java:30)
at d.d.a(Observable.java:10142)
at d.c.a.h.a(OnSubscribeMap.java:48)
at d.c.a.h.a(OnSubscribeMap.java:33)
at d.c.a.g.a(OnSubscribeLift.java:48)
at d.c.a.g.a(OnSubscribeLift.java:30)
at d.d.a(Observable.java:10238)
at d.d.b(Observable.java:10205)
at d.d.a(Observable.java:10010)
at com.magis.icbc.ui.activities.SplashActivity.n(SplashActivity.java:222)
at com.magis.icbc.ui.activities.SplashActivity.onCreate(SplashActivity.java:173)
at android.app.Activity.performCreate(Activity.java:6876)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access00(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.NoSuchFieldException: No field producerIndex in class
Ld/c/d/b/r; (declaration of 'd.c.d.b.r' appears in
/data/app/com.magis.icbc-1/base.apk)
at java.lang.Class.getDeclaredField(Native Method)
at d.c.d.b.s.a(UnsafeAccess.java:112)
eaxctly 在这一行 .subscribe(granted -> {
看起来您有一种设备,除了看似提供不安全的访问外,还会重命名字段并中断反射。尝试通过在 RxJava 初始化之前将 rx.unsafe-disable
系统 属性 设置为 true
来禁用这个旧的 RxJava 功能。
我使用 RxPermission 库轻松处理运行时权限,
在我的应用程序中,我要求位置:
rxPermissions
.request(Manifest.permission.ACCESS_FINE_LOCATION)
.subscribe(granted -> {
if (granted) {
boolean gpsEnabled, networkEnabled;
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (locationManager != null) {
gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
networkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (gpsEnabled && locationListenerGPS != null) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0L, 0f, locationListenerGPS);
}
if (networkEnabled && locationListenerNetwork != null) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0L, 0f, locationListenerNetwork);
}
}
} else {
Log.d("Access not granted", "no location");
}
});
当我打开 debug-apk 时,它工作得很好,但是当我尝试打开 release apk 时,它崩溃并出现以下错误:
FATAL EXCEPTION: main Process: com.magis.icbc, PID: 19522 java.lang.InternalError at d.c.d.b.s.a(UnsafeAccess.java:115) at d.c.d.b.r.(SpscArrayQueue.java:42) at d.c.a.d$c.(OnSubscribeConcatMap.java:129) at d.c.a.d.a(OnSubscribeConcatMap.java:82) at d.c.a.d.a(OnSubscribeConcatMap.java:42) at d.d.a(Observable.java:10142) at d.c.a.k$e.a(OperatorMerge.java:248) at d.c.a.k$e.b(OperatorMerge.java:148) at d.c.a.h$a.b(OnSubscribeMap.java:77) at d.c.a.k$e.a(OperatorMerge.java:511) at d.c.a.k$e.a(OperatorMerge.java:466) at d.c.a.k$e.a(OperatorMerge.java:244) at d.c.a.k$e.b(OperatorMerge.java:148) at d.c.a.e$a.a(OnSubscribeFromArray.java:76) at d.c.a.e$a.a(OnSubscribeFromArray.java:58) at d.i.a(Subscriber.java:211) at d.c.a.e.a(OnSubscribeFromArray.java:32) at d.c.a.e.a(OnSubscribeFromArray.java:24) at d.c.a.g.a(OnSubscribeLift.java:48) at d.c.a.g.a(OnSubscribeLift.java:30) at d.d.a(Observable.java:10142) at d.c.a.h.a(OnSubscribeMap.java:48) at d.c.a.h.a(OnSubscribeMap.java:33) at d.c.a.g.a(OnSubscribeLift.java:48) at d.c.a.g.a(OnSubscribeLift.java:30) at d.c.a.g.a(OnSubscribeLift.java:48) at d.c.a.g.a(OnSubscribeLift.java:30) at d.d.a(Observable.java:10142) at d.c.a.h.a(OnSubscribeMap.java:48) at d.c.a.h.a(OnSubscribeMap.java:33) at d.c.a.g.a(OnSubscribeLift.java:48) at d.c.a.g.a(OnSubscribeLift.java:30) at d.d.a(Observable.java:10238) at d.d.b(Observable.java:10205) at d.d.a(Observable.java:10010) at com.magis.icbc.ui.activities.SplashActivity.n(SplashActivity.java:222) at com.magis.icbc.ui.activities.SplashActivity.onCreate(SplashActivity.java:173) at android.app.Activity.performCreate(Activity.java:6876) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) at android.app.ActivityThread.access00(ActivityThread.java:221) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: java.lang.NoSuchFieldException: No field producerIndex in class Ld/c/d/b/r; (declaration of 'd.c.d.b.r' appears in /data/app/com.magis.icbc-1/base.apk) at java.lang.Class.getDeclaredField(Native Method) at d.c.d.b.s.a(UnsafeAccess.java:112)
eaxctly 在这一行 .subscribe(granted -> {
看起来您有一种设备,除了看似提供不安全的访问外,还会重命名字段并中断反射。尝试通过在 RxJava 初始化之前将 rx.unsafe-disable
系统 属性 设置为 true
来禁用这个旧的 RxJava 功能。