ndixon
ndixon

Reputation: 115

Android app working in debug mode but not when installed

I'm new to Android development and I'm having a weird issue. I am trying to pull and display calendar events from an AsyncTask. This works in debug mode, but if I try to install the application through the apk the application crashes with this error :

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)  

The call that I am making :

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

Anyone have any ideas? Thanks in advance.

Ok so after some troubleshooting it seems that something is going wrong when using Proguard. If I remove this line from my project.properties file, my application now works:

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

Anyone know exactly why this would make a difference?

Upvotes: 1

Views: 2496

Answers (1)

David Wasser
David Wasser

Reputation: 95578

Read about Proguard and Android here: http://developer.android.com/tools/help/proguard.html

Since you are getting a "No accessible default constructor" exception it is most likely that Proguard has removed this constructor from the package because it couldn't find users of this constructor (Proguard removes inaccessible or unused code from the package to make it smaller). You will have to tell Proguard to keep certain code in the package even though it isn't obviously used.

The other alternative is to disable Proguard for release builds.

Upvotes: 2

Related Questions