Aplikasi rilis Android memasukkan nilai yang salah ke database Firebase

Saya memiliki kelas model untuk menyimpan nilai dalam database Firebase yang berfungsi dengan baik untuk aplikasi debug tetapi ketika saya menjalankan dalam mode Rilis atau menghasilkan rilis .apk, nilai yang salah diposting di database Firebase saya (json sebenarnya tidak diposting).

-KWqzFGEvUyCLx6obroBaddclose 
     a: "hLjOMC64NRdjqR0nfaUKhR3qz0l2"
     b: "[email protected]"

Entri Proguard saya

-keep @com.google.gson.annotations.Expose public class *
    -dontwarn sun.misc.Unsafe
    -dontwarn android.databinding.**
    -keep class android.databinding.** { *; }



     # Facebook library
     -dontwarn javax.annotation.**
     -dontwarn okio.**
     -keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
     -keep @com.facebook.common.internal.DoNotStrip class *
     -keepclassmembers class * {
         @com.facebook.common.internal.DoNotStrip *;
     }

     ####################Retrofit##############

     # Platform calls Class.forName on types which do not exist on Android to determine platform.
     -dontnote retrofit2.Platform
     # Platform used when running on RoboVM on iOS. Will not be used at runtime.
     -dontnote retrofit2.Platform$IOS$MainThreadExecutor
     # Platform used when running on Java 8 VMs. Will not be used at runtime.
     -dontwarn retrofit2.Platform$Java8
     # Retain generic type information for use by reflection by converters and adapters.
     -keepattributes Signature
     # Retain declared checked exceptions for use by a Proxy instance.
     -keepattributes Exceptions

     ##########################################


     -keep class com.firebase.** { *; }
     -keep class org.apache.** { *; }
     -keepnames class com.fasterxml.jackson.** { *; }
     -keepnames class javax.servlet.** { *; }
     -keepnames class org.ietf.jgss.** { *; }
     -dontwarn org.w3c.dom.**
     -dontwarn org.joda.time.**
     -dontwarn org.shaded.apache.**
     -dontwarn org.ietf.jgss.**

Bangun Peringatan

Error:warning: Ignoring InnerClasses attribute for an anonymous inner class
Error:(c.a.a.g.b) that doesn't come with an
Error:associated EnclosingMethod attribute. This class was probably produced by a
Error:compiler that did not target the modern .class file format. The recommended
Error:solution is to recompile the class from source, using an up-to-date compiler
Error:and without specifying any "-target" type options. The consequence of ignoring
Error:this warning is that reflective operations on this class will incorrectly
Error:indicate that it is *not* an inner class.

person user2837615    schedule 18.11.2016    source sumber


Jawaban (1)


Sulit memberikan jawaban yang sangat tepat karena Anda tidak menunjukkan kodenya.

Saya berasumsi Anda memiliki kode di suatu tempat seperti ini:

public class MyData {    
    private String id ;
    private String email ;    
}

Kemudian:

MyData myData = ... ;
databaseReference.push().setValue(myData);

Masalahnya adalah MyData menjadi kabur. Maka ada 2 kemungkinan solusi:

Cegah kebingungan di MyData :

-keepnames class com.example.MyData
-keepclassmembers class com.example.MyData {*;}

Atau memiliki kontrol yang lebih baik atas apa yang dikirim ke firebase :

public class MyData {

    private String id ;
    private String email ;

    public Map<String, Object> toMap() {
        Map<String, Object> map = new HashMap<>();
        map.put("id", id);
        map.put("email", email);
        return map ;
    }
}

Kemudian:

MyData myData = ... ;
databaseReference.push().setValue(myData.toMap());

Solusi ini akan berfungsi jika MyData dikaburkan.

Semoga ini bisa membantu Anda.

person Benoit    schedule 18.11.2016
comment
Terima kasih atas jawaban Anda, ini akan berfungsi dalam kasus normal, tetapi sayangnya sebelum memposting pertanyaan ke Stack-overflow saya telah menerapkan kedua solusi tersebut, yang saya dapatkan dari thread lain. Tetap saja kesalahan belum terselesaikan. Jadi saya mengaktifkan debug dalam mode rilis dan menemukan pengecualian dihasilkan di kelas model itu sendiri, karena saya telah mengganti metode sama dengan di mana pengecualian dihasilkan yang tidak terjadi dalam mode Debug. Untuk sementara saya telah memperbaiki kesalahan tetapi saya masih penasaran mengapa pengecualian hanya dihasilkan dalam mode rilis. - person user2837615; 19.11.2016
comment
@ user2837615 Jika Anda hanya mengalami masalah pada rilis, sepertinya masalah yang membingungkan. Namun solusi pertama di atas - mencegah kebingungan pada MyData - seharusnya dapat menyelesaikan masalah. Mungkin Anda bisa memposting metode sama dengan() dan tumpukan pengecualian yang Anda dapatkan? - person Benoit; 19.11.2016