IllegalArgumentException:无法访问类com.e.pi的默认构造函数

时间:2016-06-24 21:10:32

标签: android proguard

在调试模式和Android工作室中运行我的应用程序,app运行良好;然而,当构建然后签署APK并在手机上安装时,应用程序会崩溃并显示以下堆栈跟踪:

06-24 13:54:59.725 17656-17656/? E/AndroidRuntime: FATAL EXCEPTION: main
   Process: com.test, PID: 17656
   java.lang.RuntimeException: Unable to create application com.test.Utilities.TestApplication: java.lang.IllegalArgumentException: Default constructor for class com.e.pi is not accessible.
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4715)
       at android.app.ActivityThread.-wrap1(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:5422)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    Caused by: java.lang.IllegalArgumentException: Default constructor for class com.e.pi is not accessible.
       at com.e.mo.b(Unknown Source)
       at com.e.kh.b(Unknown Source)
       at com.e.kh.J(Unknown Source)
       at com.e.gr.a(Unknown Source)
       at com.test.Utilities.TestApplication.onCreate(Unknown Source)
       at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4712)
       at android.app.ActivityThread.-wrap1(ActivityThread.java) 
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) 
       at android.os.Handler.dispatchMessage(Handler.java:102) 
       at android.os.Looper.loop(Looper.java:148) 
       at android.app.ActivityThread.main(ActivityThread.java:5422) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

我不想删除ProGuard并解决问题,任何帮助都将不胜感激!

以下是申请代码:

public class TestApplication extends Application {

    public static final String TAG = "ALL";
    private static TestApplication mInstance;
    private RequestQueue mRequestQueue;

    public TestApplication()
    {
        mInstance = this;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Fabric.with(this, new Crashlytics());

        String server = "eg....";
        // Enable Local Datastore.
        Parse.enableLocalDatastore(this);
        Parse.initialize(new Parse.Configuration.Builder(this)
                .applicationId(BuildConfig.PARSE_APP_ID)
                .clientKey(BuildConfig.PARSE_CLIENT_KEY)
                .server(server)
                .build());

        // Logging set to help debug issues, remove before releasing your app.
        OneSignal.setLogLevel(OneSignal.LOG_LEVEL.DEBUG, OneSignal.LOG_LEVEL.WARN);

        OneSignal.startInit(this)
                .setNotificationOpenedHandler(new ExampleNotificationOpenedHandler())
                .setAutoPromptLocation(true)
                .init();

        CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
                .setDefaultFontPath("fonts/Roboto-Regular.ttf")
                .setFontAttrId(R.attr.fontPath)
                .build()
        );
    }

    public static synchronized TestApplication getInstance()
    {
        if(mInstance == null)
        {
            mInstance = new TestApplication();
        }
        return mInstance;
    }

    public RequestQueue getRequestQueue(Context context)
    {
        if(mRequestQueue == null)
        {
            mRequestQueue = Volley.newRequestQueue(context);
        }

        return mRequestQueue;
    }

    public <T> void addToRequestQueue(Request<T> request, String tag, Context context)
    {
        request.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
        request.setShouldCache(false);
        getRequestQueue(context).add(request);
    }

    public <T> void addToRequestQueue(Request<T> request, Context context)
    {
        request.setTag(TAG);
        getRequestQueue(context).add(request);
    }

    public void cancelPendingRequests(Object tag)
    {
        if(mRequestQueue != null)
        {
            mRequestQueue.cancelAll(tag);
        }
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

    private class ExampleNotificationOpenedHandler implements OneSignal.NotificationOpenedHandler {
        /**
         * Callback to implement in your app to handle when a notification is opened from the Android status bar or
         * a new one comes in while the app is running.
         * This method is located in this Application class as an example, you may have any class you wish implement NotificationOpenedHandler and define this method.
         *
         * @param message        The message string the user seen/should see in the Android status bar.
         * @param additionalData The additionalData key value pair section you entered in on onesignal.com.
         * @param isActive       Was the app in the foreground when the notification was received.
         */
        @Override
        public void notificationOpened(String message, JSONObject additionalData, boolean isActive) {
            String additionalMessage = "";

            try {
                if (additionalData != null) {
                    if (additionalData.has("this")) {
                        additionalMessage = additionalData.getString("this");

                        if (additionalMessage.toString().trim().equalsIgnoreCase("x")) {
                            Intent newIntent = new Intent("com.test.push");//this has to match your intent filter
                            newIntent.putExtra("FEATURE_PUSH", "x");
                            newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(newIntent);
                        }
                        else if (additionalMessage.toString().trim().equalsIgnoreCase("y")) {
                            Intent newIntent = new Intent("com.test.push");//this has to match your intent filter
                            newIntent.putExtra("FEATURE_PUSH", "y");
                            newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(newIntent);
                        }
                    }
                }

            } catch (Throwable t) {
                t.printStackTrace();
            }
        }
    }

    public ImageLoader getImageLoader() {
        return mImageLoader;
    }
}

1 个答案:

答案 0 :(得分:0)

您可以使用support.annotation中的@Keep注释要保留的类或方法。