ClassNotFoundException ใน Realm หลังจากเปิดใช้งาน proguard

ฉันได้รับข้อยกเว้น:

เกิดจาก: java.lang.ClassNotFoundException: ไม่พบคลาส io.realm.Realm

ใน build.gradle miniifyEnabled จริง

proguard-rules.pro:

- เก็บคลาส io.realm.annotations.RealmModule

- เก็บคลาส @ io.realm.annotations.RealmModule *

- เก็บคลาส io.realm.internal.Keep

-keep @ io.realm.internal.เก็บคลาส *

-อย่าใช้ javax**

-เก็บคลาส io.realm.{ *; }

-keepnames คลาสสาธารณะ * ขยาย io.realm.RealmObject

- เก็บคลาสสาธารณะ * ขยาย io.realm.RealmObject { *; }

มีความคิดอะไรบ้าง?


person Daryn    schedule 10.01.2018    source แหล่งที่มา
comment
โปรดก่อนที่จะใช้ pro-guard โปรดอ่านเอกสารประกอบ   -  person David Hackro    schedule 10.01.2018
comment
หากสิ่งนี้เหมือนกับที่เราเห็นใน realm.io พวกเขาอ้างว่าคุณไม่จำเป็นต้องทำเช่นนี้: การกำหนดค่า ProGuard มีให้โดยเป็นส่วนหนึ่งของไลบรารี Realm ซึ่งหมายความว่าคุณไม่จำเป็นต้องเพิ่มกฎเฉพาะของ Realm ลงในการกำหนดค่า ProGuard ของคุณ นั่นคือ ฉันสงสัยว่าการปรับเปลี่ยนกฎของ Proguard จะไม่ช่วยแก้ปัญหานี้ได้ เนื่องจากเกี่ยวข้องกับสิ่งอื่น   -  person    schedule 11.01.2018
comment
มาดูไฟล์โปรเจ็กต์และแอปของคุณ build.gradle   -  person    schedule 11.01.2018
comment
คุณใช้ Realm เวอร์ชันใดอยู่ นี่คืออุปกรณ์เวอร์ชัน API ใด   -  person EpicPandaForce    schedule 11.01.2018


คำตอบ (1)


ดูเหมือนว่าคุณจะต้องแทนที่กฎนี้:

-keep class io.realm.{ *; }

ด้วยอันนี้:

-keep class io.realm.** { *; }

ทุกอย่างอื่นๆ ที่ขึ้นต้นด้วย io.realm ก็สามารถลบออกได้

ทำไม กฎข้อแรกที่คุณมีที่นี่ไม่ถูกต้อง ส่วนที่สองจะเก็บทุกอย่างไว้ใน io.realm รวมถึงแพ็คเกจย่อย วิธีการ และฟิลด์ต่างๆ ซึ่งหมายความว่าจะแทนที่กฎอื่นๆ ทั้งหมด

person woutwoot    schedule 11.01.2018