2017-02-03 4 views
13
ArrayIndexOutOfBoundsException

मैं निम्नलिखित ProGuard नियमों का उपयोग कर रहा हूँ:केवल ProGuard का उपयोग करके: init नहीं किया जा सका DaoConfig =>

 
java.lang.RuntimeException: Unable to create application my.app.package.MyApplication: org.greenrobot.greendao.DaoException: Could not init DAOConfig 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4569) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:148) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5272) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) 
Caused by: org.greenrobot.greendao.DaoException: Could not init DAOConfig 
    at org.greenrobot.greendao.internal.DaoConfig.(Unknown Source) 
    at org.greenrobot.greendao.AbstractDaoMaster.registerDaoClass(Unknown Source) 
    at my.app.package.database.model.DaoMaster.(Unknown Source) 
    at my.app.package.database.model.DaoMaster.(Unknown Source) 
    at my.app.package.ZamgApplication.onCreate(Unknown Source) 
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1011) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4566) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:148)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:135)  
    at android.app.ActivityThread.main(ActivityThread.java:5272)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:372)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)  
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=5; index=6 
    at org.greenrobot.greendao.internal.DaoConfig.reflectProperties(Unknown Source) 
    at org.greenrobot.greendao.internal.DaoConfig.(Unknown Source)  
    at org.greenrobot.greendao.AbstractDaoMaster.registerDaoClass(Unknown Source)  
    at my.app.package.database.model.DaoMaster.(Unknown Source)  
    at my.app.package.database.model.DaoMaster.(Unknown Source)  
    at my.app.package.ZamgApplication.onCreate(Unknown Source)  
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1011)  
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4566)  
    at android.app.ActivityThread.access$1500(ActivityThread.java:148)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:135)  
    at android.app.ActivityThread.main(ActivityThread.java:5272)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:372)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)  

जब संकलन:

 
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao { *; } 
-keep class **$Properties 

-keep class org.greenrobot.greendao.** 
-keepclassmembers class org.greenrobot.greendao.** { *; } 

# If you do not use SQLCipher: 
-dontwarn org.greenrobot.greendao.database.** 

# If you do not use RxJava: 
-dontwarn rx.** 

एप्लिकेशन मैं निम्नलिखित क्रैश लॉग प्राप्त करें ProGuard के बिना ऐप, सब कुछ ठीक काम करता है।

क्या मुझे यहां कोई कॉन्फ़िगरेशन याद आ रही है? मैं इस पर गूगल के साथ कुछ भी नहीं मिला ...

+0

fwiw: खुदाई के 2 और दिनों के बाद, मैंने डेटाबेस को realm.io – muetzenflo

उत्तर

2

ऐसा लगता है कि अनुदेश:

-keep class org.greenrobot.greendao.** 

लागू नहीं किया जा रहा है। आप लॉग में देख सकते हैं, लाइनों की तरह:

at org.greenrobot.a.c.a.a(Unknown Source) 
at org.greenrobot.a.c.a.(Unknown Source) 
at org.greenrobot.a.b.a(Unknown Source) 

बताते हैं कि org.greenrobot.greendao के तहत कक्षाएं, जबकि अपनी ProGuard निर्देश कह रहा है समझ से परे जा रहा है (या बताने के लिए लगता था) ProGuard उन्हें अपरिवर्तित रखने के लिए। इसे ठीक करने के लिए सुनिश्चित करें कि ProGuard नियम फाइल जहां इस को परिभाषित किया गया है सही ढंग से अपने Android विन्यास की proguardFiles खंड में संदर्भित किया जा रहा है:

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 

और है कि अपने रिलीज विन्यास (रों) का उपयोग एक ही proguard-rules.pro फ़ाइल।

+0

पर स्विच करने का निर्णय लिया, धन्यवाद, मैंने अपने नियम सेट को लगभग सभी चीजें greendao से रखने के लिए अपडेट किया। लॉग फ़ाइल अब थोड़ा और वर्बोज़ है, लेकिन त्रुटि हो रही है। मैंने अपने प्रश्न को नए लॉग और नियमों के साथ अपडेट किया। – muetzenflo

2

क्या आप keepEntity कक्षा में अपनी परियोजना में हैं?
यदि नहीं, तो keep पैकेज है जो आप
इस
-keep class com.xxx.xxx.model.* {*;}

+0

हाँ, मैं करता हूं। परीक्षण के उद्देश्य के लिए, मैंने अपना पूरा डेटाबेस पैकेज भी अप्रचलित रखा, लेकिन इसका कोई फायदा नहीं हुआ। चूंकि मैं इसे कोशिश करने और खोजने के एक हफ्ते बाद ठीक नहीं कर सका, इसलिए मैंने realm.io पर स्विच किया। उनके पास lib के भीतर सभी प्रोजेक्ट नियम हैं और डेवलपर के लिए ऐसा करने की आवश्यकता नहीं है। – muetzenflo

1

की तरह अपने Entity वर्ग डाल आप इस

-dontwarn org.greenrobot.greendao.** 
-keepclassmembers class * extends de.greenrobot.dao.AbstractDao { 

} 
-keep class **$Properties 

उपयोग अद्यतन संस्करण

apply plugin: 'org.greenrobot.greendao' 

compile 'org.greenrobot:greendao:3.2.0' 

ही Here सूचीबद्ध समस्याओं को कोशिश कर सकते हैं और here और 012 पर

संबंधित मुद्दे