Firebase Android :创建原子字段更新程序失败,java.lang.IllegalArgumentExce



我的安卓应用在调试模式下运行正常,但在发布模式下崩溃。当我尝试使用 Firebase 登录时,就会出现问题 Auth.App 如果我在发布版本中设置可调试 : true,则工作正常。Log cat 提供与原子字段更新相关的错误。是因为 proguard 正在删除某些类吗?我在下面提供了代码和日志猫:

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
}

根据我的观察,我认为模型类(当前用户(的名称声明在使用 proguard 规则后发生了变化,因此添加一个语句以从 proguard 中排除 Currentuser.class 将解决问题。将以下语句添加到项目文件夹中的 progurad-rules.pro 文件中

-keep class in.permabull.permabull.CurrentUser { *; }

注意:如果 CurrentUser 类位于路径 java/in/permabull/permabull/CurrentUser 中,则根据此更改。干杯:)

我必须禁用 R8 才能解决此问题,谷歌已经打开了一个问题 https://r8-review.googlesource.com/c/r8/+/26161

最新更新