Closed misaochan closed 6 years ago
Wow. So it said APK build successful and I was able to upload to Google Play beta - but the app crashes for me on the Google Play beta version. I sent logs, but can't access them until they go through to the server. Unsure if it is related to this, but it looks likely.
Will try to deploy the fixes mentioned at https://stackoverflow.com/questions/46989310/commons-logging-defines-classes-that-conflict-with-classes-now-provided-by-andro
Huh. Well, that didn't solve the problem for me. :/
Ran logcat:
11-27 22:31:35.631 25616-25616/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: fr.free.nrw.commons, PID: 25616
java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.free.nrw.commons/fr.free.nrw.commons.contributions.ContributionsActivity}: java.lang.NullPointerException: fr.free.nrw.commons.CommonsApplication.activityInjector() returned null
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2924)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2985)
at android.app.ActivityThread.-wrap14(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Caused by: java.lang.NullPointerException: fr.free.nrw.commons.CommonsApplication.activityInjector() returned null
at dagger.internal.Preconditions.checkNotNull(Preconditions.java:79)
at dagger.android.AndroidInjection.inject(AndroidInjection.java:56)
at fr.free.nrw.commons.contributions.ContributionsActivity.onCreate(ContributionsActivity.java:142)
at android.app.Activity.performCreate(Activity.java:6912)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2877)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2985)
at android.app.ActivityThread.-wrap14(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
11-27 22:31:40.509 25646-25646/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: fr.free.nrw.commons, PID: 25646
java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.free.nrw.commons/fr.free.nrw.commons.contributions.ContributionsActivity}: java.lang.NullPointerException: fr.free.nrw.commons.CommonsApplication.activityInjector() returned null
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2924)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2985)
at android.app.ActivityThread.-wrap14(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Caused by: java.lang.NullPointerException: fr.free.nrw.commons.CommonsApplication.activityInjector() returned null
at dagger.internal.Preconditions.checkNotNull(Preconditions.java:79)
at dagger.android.AndroidInjection.inject(AndroidInjection.java:56)
at fr.free.nrw.commons.contributions.ContributionsActivity.onCreate(ContributionsActivity.java:142)
at android.app.Activity.performCreate(Activity.java:6912)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2877)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2985)
at android.app.ActivityThread.-wrap14(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Not sure why this error doesn't occur on Debug mode. I guess it's due to the library conflicts (Dagger vs httpclient or commons-logging perhaps).
From the result of 'gradle app:dependencies', it looks like the old dependencies are via in.yuvi:http.fluent (which is unmaintained). Not sure if we have to remove (replace) it or there are easier workarounds.
EDIT: the list below is from a version before the fix above. After the fix, there was no httpclient (which could result in using a newer httpclient with potentially incompatible API?).
prodReleaseCompileClasspath - Resolved configuration for compilation for variant: prodRelease
+--- com.github.nicolas-raoul:Quadtree:ac16ea8035bf07
+--- fr.avianey.com.viewpagerindicator:library:2.4.1.1
+--- in.yuvi:http.fluent:1.3
| +--- org.apache.httpcomponents:httpclient:4.2.2
| | +--- org.apache.httpcomponents:httpcore:4.2.2
| | +--- commons-logging:commons-logging:1.1.1
| | \--- commons-codec:commons-codec:1.6 -> 1.10
| \--- org.apache.httpcomponents:httpmime:4.2.2
| \--- org.apache.httpcomponents:httpcore:4.2.2
+--- com.android.volley:volley:1.0.0
+--- ch.acra:acra:4.7.0
| \--- com.android.support:support-v4:23.0.1 -> 26.1.0
| +--- com.android.support:support-compat:26.1.0
| | +--- com.android.support:support-annotations:26.1.0 -> 25.2.0
| | \--- android.arch.lifecycle:runtime:1.0.0
| | +--- android.arch.lifecycle:common:1.0.0
| | \--- android.arch.core:common:1.0.0
| +--- com.android.support:support-media-compat:26.1.0
| | +--- com.android.support:support-annotations:26.1.0 -> 25.2.0
| | \--- com.android.support:support-compat:26.1.0 (*)
| +--- com.android.support:support-core-utils:26.1.0
| | +--- com.android.support:support-annotations:26.1.0 -> 25.2.0
| | \--- com.android.support:support-compat:26.1.0 (*)
| +--- com.android.support:support-core-ui:26.1.0
| | +--- com.android.support:support-annotations:26.1.0 -> 25.2.0
| | \--- com.android.support:support-compat:26.1.0 (*)
| \--- com.android.support:support-fragment:26.1.0
| +--- com.android.support:support-compat:26.1.0 (*)
| +--- com.android.support:support-core-ui:26.1.0 (*)
| \--- com.android.support:support-core-utils:26.1.0 (*)
+--- org.mediawiki:api:1.3
| \--- in.yuvi:http.fluent:1.3 (*)
+--- commons-codec:commons-codec:1.10
+--- com.github.pedrovgs:renderers:3.3.3
| \--- com.android.support:recyclerview-v7:25.3.1 -> 26.1.0
| +--- com.android.support:support-annotations:26.1.0 -> 25.2.0
| +--- com.android.support:support-compat:26.1.0 (*)
| \--- com.android.support:support-core-ui:26.1.0 (*)
+--- com.google.code.gson:gson:2.8.1
+--- com.jakewharton.timber:timber:4.5.1
+--- info.debatty:java-string-similarity:0.24
| \--- net.jcip:jcip-annotations:1.0
+--- com.mapbox.mapboxsdk:mapbox-android-sdk:5.1.0
| +--- com.android.support:support-annotations:25.3.1 -> 25.2.0
| +--- com.android.support:support-v4:25.3.1 -> 26.1.0 (*)
| +--- com.android.support:design:25.3.1 -> 26.1.0
| | +--- com.android.support:support-v4:26.1.0 (*)
| | +--- com.android.support:appcompat-v7:26.1.0
| | | +--- com.android.support:support-annotations:26.1.0 -> 25.2.0
| | | +--- com.android.support:support-v4:26.1.0 (*)
| | | +--- com.android.support:support-vector-drawable:26.1.0
| | | | +--- com.android.support:support-annotations:26.1.0 -> 25.2.0
| | | | \--- com.android.support:support-compat:26.1.0 (*)
| | | \--- com.android.support:animated-vector-drawable:26.1.0
| | | +--- com.android.support:support-vector-drawable:26.1.0 (*)
| | | \--- com.android.support:support-core-ui:26.1.0 (*)
| | +--- com.android.support:recyclerview-v7:26.1.0 (*)
| | \--- com.android.support:transition:26.1.0
| | +--- com.android.support:support-annotations:26.1.0 -> 25.2.0
| | \--- com.android.support:support-v4:26.1.0 (*)
| +--- com.jakewharton.timber:timber:4.5.1
| +--- com.squareup.okhttp3:okhttp:3.7.0 -> 3.8.1
| | \--- com.squareup.okio:okio:1.13.0
| +--- com.mapzen.android:lost:1.1.1
| | +--- com.android.support:appcompat-v7:22.2.0 -> 26.1.0 (*)
| | \--- com.android.support:support-v4:22.2.0 -> 26.1.0 (*)
| +--- com.mapbox.mapboxsdk:mapbox-java-geojson:2.1.3
| | +--- com.mapbox.mapboxsdk:mapbox-java-core:2.1.3
| | \--- com.google.code.gson:gson:2.8.0 -> 2.8.1
| \--- com.mapbox.mapboxsdk:mapbox-android-telemetry:2.1.3
| +--- com.android.support:appcompat-v7:25.1.0 -> 26.1.0 (*)
| \--- com.squareup.okhttp3:okhttp:3.6.0 -> 3.8.1 (*)
+--- com.android.support:support-v4:26.1.0 (*)
+--- com.android.support:appcompat-v7:26.1.0 (*)
+--- com.android.support:design:26.1.0 (*)
+--- com.android.support:cardview-v7:26.1.0
| \--- com.android.support:support-annotations:26.1.0 -> 25.2.0
+--- com.jakewharton:butterknife:8.6.0
| +--- com.jakewharton:butterknife-annotations:8.6.0
| | \--- com.android.support:support-annotations:25.1.0 -> 25.2.0
| +--- com.android.support:support-annotations:25.1.0 -> 25.2.0
| \--- com.android.support:support-compat:25.1.0 -> 26.1.0 (*)
+--- com.squareup.okhttp3:okhttp:3.8.1 (*)
+--- com.squareup.okio:okio:1.13.0
+--- io.reactivex.rxjava2:rxandroid:2.0.1
| \--- io.reactivex.rxjava2:rxjava:2.0.1 -> 2.1.2
| \--- org.reactivestreams:reactive-streams:1.0.0
+--- io.reactivex.rxjava2:rxjava:2.1.2 (*)
+--- com.jakewharton.rxbinding2:rxbinding:2.0.0
| +--- io.reactivex.rxjava2:rxjava:2.0.2 -> 2.1.2 (*)
| +--- io.reactivex.rxjava2:rxandroid:2.0.0 -> 2.0.1 (*)
| \--- com.android.support:support-annotations:25.1.1 -> 25.2.0
+--- com.jakewharton.rxbinding2:rxbinding-support-v4:2.0.0
| +--- com.jakewharton.rxbinding2:rxbinding:2.0.0 (*)
| \--- com.android.support:support-core-ui:25.1.1 -> 26.1.0 (*)
+--- com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.0.0
| +--- com.jakewharton.rxbinding2:rxbinding:2.0.0 (*)
| \--- com.android.support:appcompat-v7:25.1.1 -> 26.1.0 (*)
+--- com.jakewharton.rxbinding2:rxbinding-design:2.0.0
| +--- com.jakewharton.rxbinding2:rxbinding:2.0.0 (*)
| \--- com.android.support:design:25.1.1 -> 26.1.0 (*)
+--- com.facebook.fresco:fresco:1.3.0
| +--- com.facebook.fresco:drawee:1.3.0
| | \--- com.facebook.fresco:fbcore:1.3.0
| +--- com.facebook.fresco:fbcore:1.3.0
| \--- com.facebook.fresco:imagepipeline:1.3.0
| +--- com.parse.bolts:bolts-tasks:1.4.0
| +--- com.facebook.fresco:fbcore:1.3.0
| \--- com.facebook.fresco:imagepipeline-base:1.3.0
| +--- com.parse.bolts:bolts-tasks:1.4.0
| \--- com.facebook.fresco:fbcore:1.3.0
+--- com.facebook.stetho:stetho:1.5.0
| +--- commons-cli:commons-cli:1.2
| \--- com.google.code.findbugs:jsr305:2.0.1 -> 3.0.1
+--- com.google.dagger:dagger:2.11
| \--- javax.inject:javax.inject:1
+--- com.google.dagger:dagger-android-support:2.11
| +--- com.google.dagger:dagger:2.11 (*)
| +--- com.google.dagger:dagger-android:2.11
| | +--- com.google.dagger:dagger:2.11 (*)
| | +--- com.android.support:support-annotations:25.0.0 -> 25.2.0
| | +--- com.google.code.findbugs:jsr305:3.0.1
| | \--- javax.inject:javax.inject:1
| +--- com.android.support:appcompat-v7:25.0.0 -> 26.1.0 (*)
| +--- com.android.support:support-annotations:25.0.0 -> 25.2.0
| +--- com.android.support:support-v4:25.0.0 -> 26.1.0 (*)
| +--- com.google.code.findbugs:jsr305:3.0.1
| \--- javax.inject:javax.inject:1
\--- com.squareup.leakcanary:leakcanary-android-no-op:1.5.1
Possibly worth noting that even with Dagger reverted (on my fork), the ProdRelease build fails with
Error:Execution failed for task ':app:kaptProdReleaseKotlin'.
> Internal compiler error. See log for more details
:app:kaptProdReleaseKotlin
e: C:\Code\GitHub\apps-android-commons\app\src\main\java\fr\free\nrw\commons\di\ActivityBuilder.java:8: error: cannot find symbol
e:
e: @Module
e: ^
e: symbol: class Module
e: C:\Code\GitHub\apps-android-commons\app\src\main\java\fr\free\nrw\commons\location\LocationServiceManager.java:18: error: cannot find symbol
e:
e: @Singleton
e: ^
e: symbol: class Singleton
e: C:\Code\GitHub\apps-android-commons\app\src\main\java\fr\free\nrw\commons\di\AppModule.java:15: error: cannot find symbol
e:
e: @Module
e: ^
e: symbol: class Module
e: C:\Code\GitHub\apps-android-commons\app\src\main\java\fr\free\nrw\commons\di\ActivityBuilder.java:11: error: cannot find symbol
e:
e: @ContributesAndroidInjector()
e: ^
e: symbol: class ContributesAndroidInjector
e: location: class ActivityBuilder
e: C:\Code\GitHub\apps-android-commons\app\src\main\java\fr\free\nrw\commons\di\ActivityBuilder.java:14: error: cannot find symbol
e:
e: @ContributesAndroidInjector()
e: ^
e: symbol: class ContributesAndroidInjector
e: location: class ActivityBuilder
e: C:\Code\GitHub\apps-android-commons\app\src\main\java\fr\free\nrw\commons\nearby\NearbyActivity.java:57: error: cannot find symbol
e:
e: @Inject
e: ^
e: symbol: class Inject
e: location: class NearbyActivity
e: C:\Code\GitHub\apps-android-commons\app\src\main\java\fr\free\nrw\commons\location\LocationServiceManager.java:27: error: cannot find symbol
e:
e: @Inject
e: ^
e: symbol: class Inject
e: location: class LocationServiceManager
e: C:\Code\GitHub\apps-android-commons\app\src\main\java\fr\free\nrw\commons\di\AppModule.java:18: error: cannot find symbol
e:
e: @Provides
e: ^
e: symbol: class Provides
e: location: class AppModule
e: C:\Code\GitHub\apps-android-commons\app\src\main\java\fr\free\nrw\commons\di\AppModule.java:19: error: cannot find symbol
e:
e: @Singleton
e: ^
e: symbol: class Singleton
e: location: class AppModule
e: C:\Code\GitHub\apps-android-commons\app\src\main\java\fr\free\nrw\commons\di\AppModule.java:24: error: cannot find symbol
e:
e: @Provides
e: ^
e: symbol: class Provides
e: location: class AppModule
e: C:\Code\GitHub\apps-android-commons\app\src\main\java\fr\free\nrw\commons\di\AppModule.java:25: error: cannot find symbol
e:
e: @Singleton
e: ^
e: symbol: class Singleton
e: location: class AppModule
e: java.lang.IllegalStateException: failed to analyze: org.jetbrains.kotlin.kapt3.diagnostic.KaptError: Error while annotation processing
at org.jetbrains.kotlin.analyzer.AnalysisResult.throwIfError(AnalysisResult.kt:57)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules(KotlinToJVMBytecodeCompiler.kt:138)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:154)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:58)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:103)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:51)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:92)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$2.invoke(CompileServiceImpl.kt:386)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$2.invoke(CompileServiceImpl.kt:96)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:889)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:96)
at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:137)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:916)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:888)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:385)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.jetbrains.kotlin.kapt3.diagnostic.KaptError: Error while annotation processing
at org.jetbrains.kotlin.kapt3.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:90)
at org.jetbrains.kotlin.kapt3.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:42)
at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.runAnnotationProcessing(Kapt3Extension.kt:205)
at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:166)
at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:82)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:96)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:106)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:83)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:377)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:68)
at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:96)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:368)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules(KotlinToJVMBytecodeCompiler.kt:133)
... 30 more
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:kaptProdReleaseKotlin'.
> Internal compiler error. See log for more details
I reverted the beta: https://github.com/misaochan/apps-android-commons/tree/D-commit
Currently, it seems that in order to release any of the new features post-2.5.0, we will need to:
Did you post any question on StackOverflow about this? If yes, please post the URL here so that I can bounty it :-)
@nicolas-raoul Do you know if it's OK for us to link to our GitHub repo on StackOverflow? The issue is quite specific and there's too much relevant code for me to copy to StackOverflow.
The kapt failure looks like the build.gradle
dependency was removed but there are other commits that needed to come out as well.
One of the changes back in Android 6.0 was to remove the Apache HTTP Client API
Android 6.0 release removes support for the Apache HTTP client. If your app is using this client and targets Android 2.3 (API level 9) or higher, use the HttpURLConnection class instead. This API is more efficient because it reduces network use through transparent compression and response caching, and minimizes power consumption. To continue using the Apache HTTP APIs, you must first declare the following compile-time dependency in your build.gradle file:
android { useLibrary 'org.apache.http.legacy' }
Is this what we're seeing?
@psh Thanks for the suggestion. We already do have useLibrary 'org.apache.http.legacy'
in our current build.gradle file, though... or do you mean we should find a way to remove dependency on it?
@misaochan Yes the question should include all relevant elements, answerers should not have to click any link. It can be a good opportunity to check everything and make clear what the problem is with all of the minimum conditions.
Checking out with detached HEAD at https://github.com/commons-app/apps-android-commons/commit/75496388ce96eb532334f5f7efe59fb3a3d05e20 yields no such issues when tested. So the issue would lie with commits made after that point, potentially #932 is my guess. @maskaravivek , could you please take a look at this, as you made most of the recent changes to Gradle?
Interestingly, checking out the detached HEAD at https://github.com/commons-app/apps-android-commons/commit/061bb75ab835b7178aa1359589cbffa8f83b7efa (just before Dagger implementation) still causes the errors with commons-logging and httpclient (described in my first post)... so it seems Dagger might not be completely at fault after all. However we cannot discount the possibility of both Dagger and the Gradle changes being at fault.
@nicolas-raoul I am trying to think of how to describe this in SO, but I think it is really difficult to explain to someone who has no familiarity with our repo. Hopefully after we do further investigation we can write a better summary if still needed.
I can confirm that #932 is a contributing factor. Checking out the merge of #929 (the PR merged directly before 932) produces no errors, but checking out the merge of #932 does cause the errors mentioned in my first post.
The source of crash is definitely dagger but am not sure why it is happening just on release builds. I tried disabling prodguard and minification on release build(just for finding the root cause) but that too didnt help.
This is the stacktrace.
FATAL EXCEPTION: main
Process: fr.free.nrw.commons, PID: 5632
java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.free.nrw.commons/fr.free.nrw.commons.contributions.ContributionsActivity}: java.lang.NullPointerException: fr.free.nrw.commons.CommonsApplication.activityInjector() returned null
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3160)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3275)
at android.app.ActivityThread.access$1000(ActivityThread.java:218)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1744)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:7007)
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:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.lang.NullPointerException: fr.free.nrw.commons.CommonsApplication.activityInjector() returned null
at dagger.internal.Preconditions.checkNotNull(Preconditions.java:79)
at dagger.android.AndroidInjection.inject(AndroidInjection.java:56)
at fr.free.nrw.commons.contributions.ContributionsActivity.onCreate(ContributionsActivity.java:142)
at android.app.Activity.performCreate(Activity.java:6609)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3113)
@whym @psh Do you guys have any insights on it?
To recap my conversation with Vivek, it seems that there are two separate issues here:
Dagger causing crashes in release build. We are trying to find a solution for this (because ideally we would like to keep using Dagger instead of wasting time reverting many scattered commits), but if we are unable to find one within the week, we may have to revert in order to get the release out to users.
The errors with httpclient and commons-logging that existed after merging #932 but prior to Dagger implementation. Hopefully the exclude
solution mentioned above will suffice for fixing those.
After investigating a bit, i found that there seems to be some issue with fresco initialisations that is causing the crashes.
FATAL EXCEPTION: main
Process: fr.free.nrw.commons, PID: 3772
android.view.InflateException: Binary XML file line #21: Error inflating class fr.free.nrw.commons.MediaWikiImageView
at android.view.LayoutInflater.createView(LayoutInflater.java:640)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
at fr.free.nrw.commons.contributions.ContributionsListAdapter.newView(ContributionsListAdapter.java:21)
at android.support.v4.widget.CursorAdapter.getView(CursorAdapter.java:269)
at android.widget.AbsListView.obtainView(AbsListView.java:2828)
at android.widget.GridView.onMeasure(GridView.java:1064)
at android.view.View.measure(View.java:18926)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464)
at android.view.View.measure(View.java:18926)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:18926)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464)
at android.view.View.measure(View.java:18926)
at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1060)
at android.view.View.measure(View.java:18926)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
at android.view.View.measure(View.java:18926)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:721)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:612)
at android.view.View.measure(View.java:18926)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:18926)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:721)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:612)
at android.view.View.measure(View.java:18926)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5908)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:3076)
at android.view.View.measure(View.java:18926)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2411)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1429)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1677)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1314)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7057)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:829)
at android.view.Choreographer.doCallbacks(Choreographer.java:606)
at android.view.Choreographer.doFrame(Choreographer.java:576)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:815)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:7007)
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:1404)
at com.android.internal.os.ZygoteInit.
CommonsApplication
that provides an instance of application. CommonApplication
. Here's a reference to the Fresco
init issue.
So to fix the issue, am doing two things,
When generating a signed APK with the ProdRelease build, I get these errors:
I was able to carry on and generate the APK regardless, but we should still probably look into them so that we don't keep getting errors in future versions.
Update: Currently, it seems that in order to release any of the new features post-2.5.0, we will need to: