簡體   English   中英

當 minifyEnabled 為 true 時,Firebase 應用程序崩潰

[英]Firebase App Crashes when minifyEnabled is true

我的 android 項目有問題。 每當我將 minifyEnabled 設置為 true 時,應用程序就會崩潰。 該應用程序在 firebase 后端運行。

下面是我在 android 工作室中運行的日志

D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.helium4.aplo, PID: 23927
    u5.d: No properties to serialize found on class e8.g
        at d6.a$a.<init>(:548)
        at d6.a.r(:330)
        at d6.a.c(:431)
        at d6.a.l(:232)
        at d6.a.i(:80)
        at u5.b.i(:203)
        at m1.b.b(:29)
        at m1.b.a(:15)
        at l1.a.a(:36)
        at l1.c.get(:52)
        at com.firebase.ui.database.FirebaseRecyclerAdapter.I(:109)
        at com.firebase.ui.database.FirebaseRecyclerAdapter.x(:149)
        at androidx.recyclerview.widget.RecyclerView$g.y(:7065)
        at androidx.recyclerview.widget.RecyclerView$g.k(:7107)
        at androidx.recyclerview.widget.RecyclerView$u.F(:6012)
        at androidx.recyclerview.widget.RecyclerView$u.G(:6279)
        at androidx.recyclerview.widget.RecyclerView$u.p(:6118)
        at androidx.recyclerview.widget.RecyclerView$u.o(:6114)
        at androidx.recyclerview.widget.LinearLayoutManager$c.d(:2303)
        at androidx.recyclerview.widget.LinearLayoutManager.r2(:1627)
        at androidx.recyclerview.widget.LinearLayoutManager.U1(:1587)
        at androidx.recyclerview.widget.LinearLayoutManager.X0(:665)
        at androidx.recyclerview.widget.RecyclerView.D(:4134)
        at androidx.recyclerview.widget.RecyclerView.B(:3851)
        at androidx.recyclerview.widget.RecyclerView.u(:1897)
        at androidx.recyclerview.widget.RecyclerView$a.run(:414)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1010)
        at android.view.Choreographer.doCallbacks(Choreographer.java:809)
        at android.view.Choreographer.doFrame(Choreographer.java:740)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:995)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:246)
        at android.app.ActivityThread.main(ActivityThread.java:8595)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

下面給出的是我的 Build Gradle


//noinspection DuplicatePlatformClasses
plugins {
    id 'com.android.application'
    id 'com.google.gms.google-services'
    id 'com.google.firebase.crashlytics'
    id 'com.google.firebase.firebase-perf'
}

android {
    compileSdk 31

    defaultConfig {
        applicationId "com.helium4.aplo"
        minSdk 21
        targetSdk 31
        versionCode 6

        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        debug{
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            consumerProguardFiles 'proguard-rules.pro'

        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    buildFeatures {
        viewBinding true
    }


    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }

}

這是我的 MainActivity


import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;

import com.google.android.material.bottomnavigation.BottomNavigationView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.helium4.aplo.databinding.ActivityMainBinding;

import java.util.Objects;

public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding binding;
    private FirebaseAuth mAuth;
    private DatabaseReference UsersRef,subscriberRef,RentDueRef,DeviceRef,DeviceDetRef;
    String currentUserID,currentUserMail,m_androidId;
    Utils utils;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        utils = new Utils();
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        BottomNavigationView navView = findViewById(R.id.nav_view);
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
                R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_settings)
                .build();
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main);
        NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
        NavigationUI.setupWithNavController(binding.navView, navController);

        getSupportActionBar()
                .hide();
        mAuth = FirebaseAuth.getInstance();

        currentUserID = Objects.requireNonNull(mAuth.getCurrentUser()).getUid();
        m_androidId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);

        UsersRef = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserID);
        DeviceDetRef = FirebaseDatabase.getInstance().getReference().child("UserDeviceLog").child(currentUserID);
        DeviceRef = FirebaseDatabase.getInstance().getReference().child("UserDevice").child(currentUserID);

        UsersRef.child("logStatus").setValue("active");
        DeviceDetRef.child(m_androidId).child("logStatus").setValue("active");
        DeviceDetRef.child(m_androidId).child("logIp").setValue(String.valueOf(utils.getIp(true)));

        UsersRef.child("logStatus").onDisconnect().setValue("inactive");
        UsersRef.child("logStatusTime").onDisconnect().setValue(System.currentTimeMillis());

        DeviceDetRef.child(m_androidId).child("logStatus").onDisconnect().setValue("inactive");
        DeviceDetRef.child(m_androidId).child("logStatusTime").onDisconnect().setValue(System.currentTimeMillis());
        DeviceDetRef.child(m_androidId).child("logIp").onDisconnect().setValue(String.valueOf(utils.getIp(true)));


        DeviceRef.orderByChild("deviceId").equalTo(m_androidId).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if (snapshot.exists()){
                    if (snapshot.hasChild("deviceStatus")){
                        String status = snapshot.child("deviceStatus").getValue().toString();

                        if (status.equals("logout")){
                            mAuth.signOut();
                            Intent mainIntent = new Intent(MainActivity.this, LoginRegisterActivity. class);
                            mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                            startActivity(mainIntent);
                        }
                    }
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });



    }


}

下面是我的 HomeFragment



import static android.content.Context.CLIPBOARD_SERVICE;

import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import com.helium4.aplo.HelpActivity;
import com.helium4.aplo.MainActivity;
import com.helium4.aplo.Utils;
import com.helium4.aplo.customer.CustomerActivity;
import com.helium4.aplo.LoginRegisterActivity;
import com.helium4.aplo.model.Subscribers;
import com.helium4.aplo.add.AddCustomerActivity;
import com.helium4.aplo.add.AddPlanActivity;
import com.helium4.aplo.add.AddZoneActivity;
import com.helium4.aplo.R;
import com.helium4.aplo.databinding.FragmentHomeBinding;
import com.squareup.picasso.Picasso;

import java.util.Calendar;
import java.util.HashMap;
import java.util.Locale;
import java.util.Objects;
import java.util.UUID;

import de.hdodenhof.circleimageview.CircleImageView;

public class HomeFragment extends Fragment {

    private HomeViewModel homeViewModel;
    private FragmentHomeBinding binding;
    private FirebaseAuth mAuth;
    private DatabaseReference UsersRef,subscriberRef,RentDueRef,AppValidity,DeviceDetRef,AppLevel;
    String currentUserID,currentUserMail;
    RecyclerView list;
    ImageView menuBtn,searchBtn,filter;
    EditText searchText;
    private static final int CALL_PERMISSION_CODE = 102;
TextView subCont;
    private ClipboardManager myClipboard;
    private ClipData myClip;
    int filt = 0,lock =0;
    String dayss ="";
    Utils utils;
    String  m_androidId, privacy;
    MainActivity mainActivity;

    @SuppressLint("HardwareIds")
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_home,container,false);
        mAuth = FirebaseAuth.getInstance();
        utils = new Utils();

        mainActivity = (MainActivity) getActivity();
        currentUserID = Objects.requireNonNull(mAuth.getCurrentUser()).getUid();
        if (currentUserID== null){
            mAuth.signOut();
            Intent mainIntent = new Intent(getActivity(), LoginRegisterActivity. class);
            mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(mainIntent);
            getActivity().finish();
        }
        myClipboard = (ClipboardManager)getActivity().getSystemService(CLIPBOARD_SERVICE);

        currentUserMail =mAuth.getCurrentUser().getEmail();
        UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");
         AppValidity= FirebaseDatabase.getInstance().getReference().child("AppPlanValidity");
        subscriberRef = FirebaseDatabase.getInstance().getReference().child("Subscribers");
       DeviceDetRef = FirebaseDatabase.getInstance().getReference().child("UserDevices").child(currentUserID);
        AppLevel = FirebaseDatabase.getInstance().getReference().child("AppLevel").child(currentUserID);

        UsersRef.keepSynced(true);
        AppValidity.keepSynced(true);
        subscriberRef.keepSynced(true);
        RentDueRef.keepSynced(true);
        DeviceDetRef.keepSynced(true);

        list = rootView.findViewById(R.id.customerRecycler);
        list.setHasFixedSize(true);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
        linearLayoutManager.setReverseLayout(false);
        linearLayoutManager.setStackFromEnd(false);
        list.setLayoutManager(linearLayoutManager);

        loadData();

return rootView;

}



private void loadData() {
        Query Order = subscriberRef.child(currentUserID).orderByChild("subName");

        FirebaseRecyclerOptions<Subscribers> options = new FirebaseRecyclerOptions.Builder<Subscribers>()
                .setQuery(Order, Subscribers.class)
                .build();

        FirebaseRecyclerAdapter<Subscribers,HomeFragment.DataViewHolder> firebaseRecyclerAdapter =new FirebaseRecyclerAdapter<Subscribers, DataViewHolder>(options) {


            @NonNull
            @Override
            public DataViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.list_subscribers, parent, false);
                HomeFragment.DataViewHolder viewHolder =new HomeFragment.DataViewHolder(view);
                return viewHolder;
            }

            @Override
            protected void onBindViewHolder(@NonNull DataViewHolder holder, int position, @NonNull Subscribers model) {

                final String pos = getRef(position).getKey();
               holder.sName.setText(model.getSubName());
                holder.sId.setText(model.getSubID());
                holder.sId.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        myClip = ClipData.newPlainText("text", model.getSubID());
                        myClipboard.setPrimaryClip(myClip);
                        Toast.makeText(getActivity(), "Subscriber ID Copied",
                                Toast.LENGTH_SHORT).show();
                    }
                });
                holder.call.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (!(model.getSubPhone() == ""))
                        {
                            checkCallingPermission(Manifest.permission.CALL_PHONE, CALL_PERMISSION_CODE,model.getSubPhone());

                        }else {
                            Toast.makeText(getActivity(),"Something went wrong",Toast.LENGTH_SHORT).show();
                        }
                    }
                });

                holder.mView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent mainIntent = new Intent(getActivity(), CustomerActivity. class);
                        mainIntent.putExtra("pos",pos);
                        startActivity(mainIntent);
                        getActivity().finish();
                    }
                });

              
            }

        };
        list.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();



    }

 @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }

    public class DataViewHolder extends RecyclerView.ViewHolder {

        TextView sName, sId, lpAmount,lpDate, rent,due;
        ImageView call;
        LinearLayout mView;
        public DataViewHolder(@NonNull View itemView) {


            super(itemView);


            sName = itemView.findViewById(R.id.subName);
            call = itemView.findViewById(R.id.subCall);
            sId = itemView.findViewById(R.id.subID);

            lpAmount = itemView.findViewById(R.id.lpAmount);
            lpDate = itemView.findViewById(R.id.lpDate);
            rent = itemView.findViewById(R.id.lRent);
            due = itemView.findViewById(R.id.lDue);
            mView = itemView.findViewById(R.id.baseLayout);




        }
    }

誰能幫我解決這個問題,為什么會出現這個錯誤。 提前致謝!! 新年快樂

ps:我是新手

錯誤No properties found on class e8.g表明您的 pojo 模型的屬性已被混淆,firebase 無法識別。 將規則添加到您的${your_project}/${your_module}/proguard-rules.pro

keepclassmembers class com.helium4.aplo.model. ** {
 *;
 }

此規則將禁用 com.helium4.aplo.model.* package 中的模型的混淆

proguard 規則文檔可以在這里查看https://www.guardsquare.com/manual/configuration/usage#keepclassmembernames

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM