commons-app / apps-android-commons

The Wikimedia Commons Android app allows users to upload pictures from their Android phone/tablet to Wikimedia Commons
https://commons-app.github.io/
Apache License 2.0
1.02k stars 1.21k forks source link

Constant crashes in Release build (current beta in Google Play Store) #986

Closed misaochan closed 6 years ago

misaochan commented 6 years ago

When generating a signed APK with the ProdRelease build, I get these errors:

C:\Code\GitHub\apps-android-commons\app\build.gradle
Error:Error: commons-logging defines classes that conflict with classes now provided by Android. Solutions include finding newer versions or alternative libraries that don't have the same problem (for example, for httpclient use HttpUrlConnection or okhttp instead), or repackaging the library using something like jarjar. [DuplicatePlatformClasses]
Error:Error: httpclient defines classes that conflict with classes now provided by Android. Solutions include finding newer versions or alternative libraries that don't have the same problem (for example, for httpclient use HttpUrlConnection or okhttp instead), or repackaging the library using something like jarjar. [DuplicatePlatformClasses]

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:

misaochan commented 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.

misaochan commented 6 years ago

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

misaochan commented 6 years ago

Huh. Well, that didn't solve the problem for me. :/

misaochan commented 6 years ago

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).

whym commented 6 years ago

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
misaochan commented 6 years ago

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
misaochan commented 6 years ago

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:

nicolas-raoul commented 6 years ago

Did you post any question on StackOverflow about this? If yes, please post the URL here so that I can bounty it :-)

misaochan commented 6 years ago

@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.

psh commented 6 years ago

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?

misaochan commented 6 years ago

@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?

nicolas-raoul commented 6 years ago

@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.

misaochan commented 6 years ago

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.

misaochan commented 6 years ago

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.

maskaravivek commented 6 years ago

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?

misaochan commented 6 years ago

To recap my conversation with Vivek, it seems that there are two separate issues here:

  1. 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.

  2. 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.

maskaravivek commented 6 years ago

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.

Here's a reference to the Fresco init issue.

So to fix the issue, am doing two things,