-1

Я использую dexguard для obfuscation. Я реализовал синхронизацию контактов google в моем проекте. Когда я вызываю класс службы контактов, эта ошибка наступает. I dint найти правильное решение для error.i также прошли через файл сопоставления, но я получаю любое решение в файле сопоставления. Я использовал множество опций, таких как keep class и keepclassmembers.but, но все же я получаю ту же проблему.Android dexguard java.lang.IllegalArgumentException: класс класса не поддерживает регистрацию метаданных

ContactsService contactsService = new ContactsService("MYAPPLICATION_NAME"); 

У меня есть erro, когда я вызываю вышеуказанный класс. Это класс обслуживания контактов google.

Ниже приведен журнал ошибок.

java.lang.IllegalArgumentException: Class class o.ڹ doesn't support metadata registration. 
at o.ԁ.ˊ(:153) 
at o.ԁ.ˊ(:121) 
at o.ԁ.ˊ(:384) 
at o.Ϋ.ˊ(:533) 
at o.Ϋ.ˋ(:455) 
at o.Ϋ.ˊ(:42) 
at o.গ.ˋ(:144) 
at o.ܪ.ˊ(:130) 
at o.ᓷ.<init>(:536) 
at o.ᓶ.<init>(:201) 
at o.ᓶ.<init>(:174) 
at o.ᓼ.<init>(:89) 
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
at com.buzzboard.contacts.fragment.AddEditContactFragment.initContactsService(:1020) 
at com.buzzboard.contacts.fragment.AddEditContactFragment.onCreateView(:244) 
at android.support.v4.app.Fragment.performCreateView(:1786) 
at android.support.v4.app.FragmentManagerImpl.moveToState(:947) 
at android.support.v4.app.FragmentManagerImpl.moveToState(:1126) 
at android.support.v4.app.BackStackRecord.run(:739) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(:1489) 
at  android.support.v4.app.FragmentManagerImpl$1.run(:454) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5021) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NoSuchMethodException: registerMetadata [class o.ԁ] 
at java.lang.Class.getConstructorOrMethod(Class.java:472) 
at java.lang.Class.getDeclaredMethod(Class.java:640) 
at o.ԁ.ˊ(:139) 

, пожалуйста, помогите мне. Я также поддерживаю некоторые из классов контакт-служб google.

ответ

1

Рассматривая исходный код и документацию com.google.gdata.model.MetadataRegistry, кажется, что некоторые классы должны содержать статический метод 'registerMetadata', который затем получает доступ через отражение. Аналогично, com.google.gdata.model.Element, похоже, ожидает поле «KEY». Поскольку ProGuard или DexGuard не может знать это, вам нужно сохранить такие поля и методы с оригинальными названиями:

-keepclassmembers class * extends com.google.gdata.model.Element { 
    public static com.google.gdata.model.ElementKey KEY; 
    public static void registerMetadata(com.google.gdata.model.MetadataRegistry); 
} 
+0

спасибо за ваш ответ answer.your это acceptable.i сделал это. –

+0

жаль поймать вас здесь @ Эрик, но могу ли я высказать ваше мнение по этому поводу? [ссылка] (http://stackoverflow.com/questions/31230719/parse-com-not-working-after-proguard/31242150) –

+0

привет, я хотел бы обратить ваше внимание на этот вопрос, http: // stackoverflow .com/questions/35539960/how-to-get-release-build-apk-file-using-proguard, ваша помощь будет с благодарностью –