android java.lang.AssertionError: java.lang.NoSuchMethodException - Proguard

Я получаю сбой моего приложения из-за этой ошибки в выпущенной версии app. Он отлично работает в режиме отладки

Process: com.app, PID: 13162
        java.lang.AssertionError: java.lang.NoSuchMethodException: <init> [interface twitter4j.conf.Configuration, interface twitter4j.a.b]
                at twitter4j.n.<clinit>(Unknown Source)
                at com.app.activities.RegistrationActivity.g(Unknown Source)
                at com.app.activities.RegistrationActivity.onCreate(Unknown Source)
                at android.app.Activity.performCreate(Activity.java:6289)
                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
                at android.app.ActivityThread.access$900(ActivityThread.java:177)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:145)
                at android.app.ActivityThread.main(ActivityThread.java:5942)
                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:1399)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
         Caused by: java.lang.NoSuchMethodException: <init> [interface twitter4j.conf.Configuration, interface twitter4j.a.b]
                at java.lang.Class.getConstructor(Class.java:531)
                at java.lang.Class.getDeclaredConstructor(Class.java:510)
                at twitter4j.n.<clinit>(Unknown Source)
                at com.app.activities.RegistrationActivity.g(Unknown Source)
                at com.app.activities.RegistrationActivity.onCreate(Unknown Source)
                at android.app.Activity.performCreate(Activity.java:6289)
                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
                at android.app.ActivityThread.access$900(ActivityThread.java:177)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:145)
                at android.app.ActivityThread.main(ActivityThread.java:5942)
                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:1399)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

Кажется, ошибка возникает из-за файла proguard

Вот proguard-rules.pro следующим образом -

# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /home/adisoft2/android/android-sdk-linux/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}
#-injars      bin/classes
#-injars      libs
#-outjars     bin/classes-processed.jar
#-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar
-keep class twitter4j.conf.**
-keep class twitter4j.TwitterImpl
-keep class twitter4j.conf.PropertyConfigurationFactory
-dontwarn com.squareup.okhttp.**
-dontwarn com.google.appengine.api.urlfetch.**
-dontwarn rx.**
-dontwarn retrofit.**
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
    @retrofit.http.* <methods>;
}
-dontwarn twitter4j.**
-dontwarn com.google.android.gms.**
-dontwarn okio.**


# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize and preverify steps (and performs some
# of these optimizations on its own).
-dontoptimize
-dontpreverify
# Note that if you want to enable optimization, you cannot just
# include optimization flags in your own project configuration file;
# instead you will need to point to the
# "proguard-android-optimize.txt" file instead of this one from your
# project.properties file.
-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
    native <methods>;
}
# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
   void set*(***);
   *** get*();
}
# We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
    public static <fields>;
}
# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version.  We know about them, and they are safe.
-dontwarn android.support.**

Пожалуйста, дайте мне знать, что я делаю не так и как исправить.


person Narendra Singh    schedule 20.04.2016    source источник
comment
Вы пробовали добавить все классы библиотеки twitter в -keep. Кажется, что функция, которую вы пытаетесь вызвать, была запутана proguard   -  person Msk    schedule 20.04.2016
comment
также проверьте это stackoverflow.com/questions/5592511/   -  person Msk    schedule 20.04.2016
comment
Получил ответ. Спасибо.   -  person Narendra Singh    schedule 20.04.2016


Ответы (2)


Добавление этого в proguard-rules.pro сработало для меня.

-keep class twitter4j.** { *; }
person Narendra Singh    schedule 20.04.2016

Да, я принимаю приведенный выше ответ (Нарендраджи). Но в моем случае он не показывал, какая библиотека или класс создают проблему.

Это похоже на

Caused by: java.lang.NoSuchMethodException: <init> 
at com.a.f

Из приведенной выше информации мы не можем понять проблему. Поэтому я использовал файл «app / build / output / release / mapping.txt».

Файл mapping.txt, содержащий четкую информацию обо всех классах, методах и пакетах. Таким образом, мы можем легко решить этот тип проблем

person Kona Suresh    schedule 01.03.2019