我的Android应用程序在调试模式下运行良好,但在发布模式下崩溃。当我尝试使用Firebase Auth.App登录时,如果我在发布版本中设置了debuggable : true,问题就会出现。Log cat提供与原子字段更新相关的错误。是不是因为proguard正在移除一些类?我已经提供了下面的代码和Logcat:
if (task.getException() instanceof FirebaseAuthUserCollisionException) {
Toast.makeText(SignUpActivity.this, "You are already registered", Toast.LENGTH_SHORT).show();
mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
progressBar.setVisibility(View.GONE);
if (task.isSuccessful()) {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String uid = user.getUid();
sharedPref = getApplicationContext().getSharedPreferences(uid, Context.MODE_PRIVATE);
sharedPref.edit().clear().commit();
DocumentReference docRef = db.collection("PB_USERS").document(uid);
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
SharedPreferences.Editor editor = sharedPref.edit();
DocumentSnapshot document = task.getResult();
if (document.exists()) {
CurrentUser currentUser = document.toObject(CurrentUser.class);
ArrayList<String> purchases = currentUser.getPurchases();
for (String purchasedTrade : purchases) {
editor.putBoolean(purchasedTrade, false);
}
editor.apply();
Intent intent = new Intent(SignUpActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
错误:
08-21 17:58:10.571 26027-26054/? E/bfy: Creating atomic field updaters failed
java.lang.IllegalArgumentException: Must be integer type
at java.util.concurrent.atomic.AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl.<init>(AtomicIntegerFieldUpdater.java:278)
at java.util.concurrent.atomic.AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdater.java:52)
at bfy.<clinit>(Unknown Source)
at bfl.a(Unknown Source)
at bfl.a(Unknown Source)
at awp.<init>(Unknown Source)
at arw.a(Unknown Source)
at ary.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at axh$a.run(Unknown Source)
at java.lang.Thread.run(Thread.java:818)
08-21 17:58:10.631 26027-26054/? E/bfx: Creating atomic field updaters failed
java.lang.ClassCastException
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:208)
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdater.java:70)
at bfx$a.<clinit>(Unknown Source)
at bfx.a(Unknown Source)
at bfx$c.a(Unknown Source)
at bdt$a.a(Unknown Source)
at bho.a(Unknown Source)
at bgw.a(Unknown Source)
at axs.a(Unknown Source)
at awm.a(Unknown Source)
at awy.f(Unknown Source)
at awy.a(Unknown Source)
at arl.a(Unknown Source)
at art.a(Unknown Source)
at arw.c(Unknown Source)
at asa.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at axh$a.run(Unknown Source)
at java.lang.Thread.run(Thread.java:818)
08-21 17:58:10.639 26027-26054/? E/bil: FieldUpdaterAtomicHelper failed
java.lang.IllegalArgumentException: Must be integer type
at java.util.concurrent.atomic.AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl.<init>(AtomicIntegerFieldUpdater.java:278)
at java.util.concurrent.atomic.AtomicIntegerFieldUpdater.newUpdater(AtomicIntegerFieldUpdater.java:52)
at bil.a(Unknown Source)
at bil.<clinit>(Unknown Source)
at bgb.<init>(Unknown Source)
at bho$f.a(Unknown Source)
at bim.a(Unknown Source)
at bdt$a.a(Unknown Source)
at bfy$e.a(Unknown Source)
at bdt$a.a(Unknown Source)
at bfx$c.a(Unknown Source)
at bdt$a.a(Unknown Source)
at bho.a(Unknown Source)
at bgw.a(Unknown Source)
at axs.a(Unknown Source)
at awm.a(Unknown Source)
at awy.f(Unknown Source)
at awy.a(Unknown Source)
at arl.a(Unknown Source)
at art.a(Unknown Source)
at arw.c(Unknown Source)
at asa.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at axh$a.run(Unknown Source)
at java.lang.Thread.run(Thread.java:818)
我是Android和Java的初学者。下面是应用程序的build.gradle部分:
compileSdkVersion 27
defaultConfig {
applicationId "in.permabull.permabull"
minSdkVersion 19
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
发布于 2018-08-22 14:36:33
根据我的观察,我认为模型类(CurrentUser)的名称声明在使用proguard规则后发生了变化,因此添加一条从proguard中排除Currentuser.class的语句可以解决这个问题。将以下语句添加到项目文件夹中的progurad rules.pro文件中
-keep class in.permabull.permabull.CurrentUser { *; }
注意:如果CurrentUser类驻留在路径java/ in /permabull/permabull/CurrentUser中,则相应地更改。干杯:)
发布于 2018-10-09 06:36:47
我不得不禁用R8来解决这个问题,谷歌已经https://r8-review.googlesource.com/c/r8/+/26161打开了一个问题
https://stackoverflow.com/questions/51949401
复制相似问题