Android 应用程序在 Debug模式下工作,但在安装时不工作

标签 android proguard

我是 Android 开发新手,遇到了一个奇怪的问题。我正在尝试从 AsyncTask 中提取和显示日历事件。这在 Debug模式下有效,但如果我尝试通过 apk 安装应用程序,应用程序会崩溃并出现此错误:

12-18 08:57:16.768: E/AndroidRuntime(8642): FATAL EXCEPTION: AsyncTask #2
12-18 08:57:16.768: E/AndroidRuntime(8642): java.lang.RuntimeException: An error     occured while executing doInBackground()
12-18 08:57:16.768: E/AndroidRuntime(8642):     at     android.os.AsyncTask$3.done(AsyncTask.java:299)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at     java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at java.lang.Thread.run(Thread.java:856)
12-18 08:57:16.768: E/AndroidRuntime(8642): Caused by:     java.lang.IllegalArgumentException: unable to create new instance of class com.a.b.b.a.a.b     because it has no accessible default constructor
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.e.aa.a(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.e.aa.a(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.e.i.b(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.d.g.a(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.d.g.a(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.d.g.a(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.d.g.a(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.d.g.a(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.d.g.a(Unknown Source)                    12-18 08:57:16.768: E/AndroidRuntime(8642):   at com.a.b.a.d.g.a(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.d.g.a(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.d.f.a(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.d.f.a(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.c.t.a(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.a.b.a.b.d.c.d(Unknown     Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.promevo.bookit.a.f(Unknown     Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.promevo.bookit.a.a(Unknown     Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at com.promevo.bookit.f.a(Unknown     Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at     com.promevo.bookit.f.doInBackground(Unknown Source)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at     android.os.AsyncTask$2.call(AsyncTask.java:287)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at     java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-18 08:57:16.768: E/AndroidRuntime(8642):     ... 5 more
12-18 08:57:16.768: E/AndroidRuntime(8642): Caused by: java.lang.InstantiationException: can't instantiate class com.a.b.b.a.a.b; no empty constructor
12-18 08:57:16.768: E/AndroidRuntime(8642):     at     java.lang.Class.newInstanceImpl(Native Method)
12-18 08:57:16.768: E/AndroidRuntime(8642):     at     java.lang.Class.newInstance(Class.java:1319)  

我正在打的电话:

Events feed = client.events().list(CalendarSampleActivity.getCalId()).setTimeMin(startPass)
        .setTimeMax(endPass).setSingleEvents(true).execute();

有人有什么想法吗?提前致谢。

好的,经过一些故障排除后,使用 Proguard 时似乎出现了问题。如果我从我的 project.properties 文件中删除这一行,我的应用程序现在可以工作了:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt:proguard-google-api-client.txt

有人确切地知道为什么这会有所作为吗?

最佳答案

在此处阅读有关 Proguard 和 Android 的信息:http://developer.android.com/tools/help/proguard.html

由于您收到“无可访问的默认构造函数”异常,很可能是 Proguard 已从包中删除了此构造函数,因为它无法找到此构造函数的用户(Proguard 从包中删除了不可访问或未使用的代码以使它更小)。您将不得不告诉 Proguard 将某些代码保留在包中,即使它显然没有被使用。

另一种方法是为发布版本禁用 Proguard。

关于Android 应用程序在 Debug模式下工作,但在安装时不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13934769/

相关文章:

Android Build 因 Artifact 而失败 - 缺少依赖项

java - 将国际电话号码转换为本地电话号码

android - 禁用某些按钮行的按钮单击

java - Proguard keepclasseswithmembers : members isnt kept?

java - 如何使用 Proguard 使用 Dagger 2.0 成功混淆项目?

android - 在 Android 上使用 Proguard 值得吗?

android - 在没有 OkHttp 拦截的情况下使用 Retrofit2 进行日志记录

android - 如何在收到广播后在android上弹出并要求用户输入

javascript - React Native Module Callback 什么都不返回

Android:如何使用 ProGuard 删除 SLF4J 调试日志记录