Dienstag, 11. Dezember 2018

Android 8.0.0's 23,8% Crashrate - 0% on Android 8.0.1 (/system/lib64/libcrypto.so)

/system/lib64/libcrypto.so  and  23,8% Crashrate

Today I learned the following lessons:

  1. do not rely on Crashlytics/Fabric.io alone => if something breaks before you will only see the crashes in Google Play. I was shocked suddenly seeing a 23,8% crash rate in Android Oreo - but only 8.0.0 - not 8.0.1
  2. Life as an Android developer is hard
  3. do not save money on your SSL certificate - Grade A is not good enough
Some further reading - this might be related (don't know yet)



  • https://developer.android.com/about/versions/oreo/android-8.1
  • https://github.com/google/conscrypt/issues/520

Interesting bit:

Cryptography updates

A number of cryptography changes have been made with Android 8.1:
  • New algorithms have been implemented in Conscrypt. The Conscrypt implementation is preferentially used over the existing Bouncy Castle implementation. New algorithms include:
    • AlgorithmParameters:GCM
    • KeyGenerator:AES
    • KeyGenerator:DESEDE
    • KeyGenerator:HMACMD5
    • KeyGenerator:HMACSHA1
    • KeyGenerator:HMACSHA224
    • KeyGenerator:HMACSHA256
    • KeyGenerator:HMACSHA384
    • KeyGenerator:HMACSHA512
    • SecretKeyFactory:DESEDE
    • Signature:NONEWITHECDSA
  • Cipher.getParameters().getParameterSpec(IvParameterSpec.class) no longer works for algorithms that use GCM. Instead, use getParameterSpec(GCMParameterSpec.class).
  • Many internal Conscrypt classes associated with TLS were refactored. Since developers sometimes access these reflectively, shims have been left in place to support previous usage, but some details have changed. For example, sockets previously were of type OpenSSLSocketImpl, but now they’re of type ConscryptFileDescriptorSocketor ConscryptEngineSocket, both of which extend OpenSSLSocketImpl.
  • SSLSession methods used to throw IllegalArgumentException when passed a null reference, they now throw NullPointerException.
  • The RSA KeyFactory no longer allows generation of keys from byte arrays that are larger than the encoded key. Calls to generatePrivate() and generatePublic() that provide a KeySpec where the key structure does not fill the entire buffer will result in an InvalidKeySpecException.
  • When a socket read is interrupted by the socket being closed, Conscrypt used to return -1 from the read. The read now throws SocketException.
  • The set of root CA certificates has been changed, mostly removing a large number of obsolete certificates, but also removing the root certificates for WoSign and StartCom. For more information on this decision, see the Google Security Blog post, Final removal of trust in WoSign and StartCom Certificates.



#00 pc 00000000000b01d4 /system/lib64/libcrypto.so (x509_name_ex_i2d+48)
#01 pc 0000000000047608 /system/lib64/libcrypto.so (ASN1_item_ex_i2d+312)
#02 pc 000000000004742c /system/lib64/libcrypto.so (asn1_item_flags_i2d+84)
#03 pc 000000000001c174 /system/lib64/libjavacrypto.so (_ZL34NativeCrypto_X509_get_subject_nameP7_JNIEnvP7_jclassl+64)
#04 pc 0000000000028ec8 /system/framework/arm64/boot-conscrypt.oat (com.android.org.conscrypt.NativeCrypto.ASN1_seq_unpack_X509_bio [DEDUPED]+152)
#05 pc 0000000000050b3c /system/framework/arm64/boot-conscrypt.oat (com.android.org.conscrypt.OpenSSLX509Certificate.getSubjectX500Principal+60)
#06 pc 00000000000610b4 /system/framework/arm64/boot-conscrypt.oat (com.android.org.conscrypt.TrustedCertificateIndex.findBySubjectAndPublicKey+68)
#07 pc 000000000005cf34 /system/framework/arm64/boot-conscrypt.oat (com.android.org.conscrypt.TrustManagerImpl.checkTrusted+404)
#08 pc 000000000005cd58 /system/framework/arm64/boot-conscrypt.oat (com.android.org.conscrypt.TrustManagerImpl.checkTrusted+536)
#09 pc 000000000005fe74 /system/framework/arm64/boot-conscrypt.oat (com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer+308)
#10 pc 0000000001170384 /system/framework/arm64/boot-framework.oat (android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted+84)
#11 pc 0000000001171434 /system/framework/arm64/boot-framework.oat (android.security.net.config.RootTrustManager.checkServerTrusted+388)
#12 pc 000000000005338c /system/framework/arm64/boot-conscrypt.oat (com.android.org.conscrypt.Platform.checkServerTrusted+380)
#13 pc 000000000003dfec /system/framework/arm64/boot-conscrypt.oat (com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain+764)
#14 pc 0000000000509384 /system/lib64/libart.so (art_quick_invoke_stub+580)
#15 pc 00000000000d8078 /system/lib64/libart.so (_ZN3art9ArtMethod6InvokeEPNS_6ThreadEPjjPNS_6JValueEPKc+200)
#16 pc 000000000043111c /system/lib64/libart.so (_ZN3artL18InvokeWithArgArrayERKNS_33ScopedObjectAccessAlreadyRunnableEPNS_9ArtMethodEPNS_8ArgArrayEPNS_6JValueEPKc+104)
#17 pc 0000000000432594 /system/lib64/libart.so (_ZN3art35InvokeVirtualOrInterfaceWithVarArgsERKNS_33ScopedObjectAccessAlreadyRunnableEP8_jobjectP10_jmethodIDSt9__va_list+448)
#18 pc 0000000000325e10 /system/lib64/libart.so (_ZN3art3JNI15CallVoidMethodVEP7_JNIEnvP8_jobjectP10_jmethodIDSt9__va_list+632)
#19 pc 000000000002f450 /system/lib64/libjavacrypto.so (_ZN7_JNIEnv14CallVoidMethodEP8_jobjectP10_jmethodIDz+120)
#20 pc 000000000002ff68 /system/lib64/libjavacrypto.so (_ZL20cert_verify_callbackP17x509_store_ctx_stPv+192)
#21 pc 0000000000029298 /system/lib64/libssl.so (ssl_crypto_x509_session_verify_cert_chain+232)
#22 pc 0000000000013b80 /system/lib64/libssl.so (ssl3_connect+2904)
#23 pc 0000000000021fbc /system/lib64/libssl.so (SSL_do_handshake+64)
#24 pc 0000000000025874 /system/lib64/libjavacrypto.so (_ZL29NativeCrypto_SSL_do_handshakeP7_JNIEnvP7_jclasslP8_jobjectS4_i+272)
#25 pc 000000000002c3d8 /system/framework/arm64/boot-conscrypt.oat (com.android.org.conscrypt.NativeCrypto.SSL_do_handshake+216)
#26 pc 000000000003d434 /system/framework/arm64/boot-conscrypt.oat (com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake+1492)
#27 pc 0000000000509384 /system/lib64/libart.so (art_quick_invoke_stub+580)
#28 pc 00000000000d8078 /system/lib64/libart.so (_ZN3art9ArtMethod6InvokeEPNS_6ThreadEPjjPNS_6JValueEPKc+200)
#29 pc 00000000002821dc /system/lib64/libart.so (_ZN3art11interpreter34ArtInterpreterToCompiledCodeBridgeEPNS_6ThreadEPNS_9ArtMethodEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameEPNS_6JValueE+352)
#30 pc 000000000027c8a4 /system/lib64/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+672)
#31 pc 00000000004f3d30 /system/lib64/libart.so (MterpInvokeVirtualQuick+680)
#32 pc 00000000004fea94 /system/lib64/libart.so (ExecuteMterpImpl+29972)
#33 pc 000000000025d620 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameENS_6JValueEb+444)
#34 pc 0000000000263d20 /system/lib64/libart.so (_ZN3art11interpreter33ArtInterpreterToInterpreterBridgeEPNS_6ThreadEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameEPNS_6JValueE+212)
#35 pc 000000000027c884 /system/lib64/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+640)
#36 pc 00000000004f1e78 /system/lib64/libart.so (MterpInvokeDirect+504)
#37 pc 00000000004fae14 /system/lib64/libart.so (ExecuteMterpImpl+14484)
#38 pc 000000000025d620 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameENS_6JValueEb+444)
#39 pc 0000000000263d20 /system/lib64/libart.so (_ZN3art11interpreter33ArtInterpreterToInterpreterBridgeEPNS_6ThreadEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameEPNS_6JValueE+212)
#40 pc 000000000027c884 /system/lib64/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+640)
#41 pc 00000000004f1e78 /system/lib64/libart.so (MterpInvokeDirect+504)
#42 pc 00000000004fae14 /system/lib64/libart.so (ExecuteMterpImpl+14484)
#43 pc 000000000025d620 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameENS_6JValueEb+444)
#44 pc 0000000000263d20 /system/lib64/libart.so (_ZN3art11interpreter33ArtInterpreterToInterpreterBridgeEPNS_6ThreadEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameEPNS_6JValueE+212)
#45 pc 000000000027d6f4 /system/lib64/libart.so (_ZN3art11interpreter6DoCallILb1ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+584)
#46 pc 00000000004f4130 /system/lib64/libart.so (MterpInvokeVirtualQuickRange+516)
#47 pc 00000000004feb14 /system/lib64/libart.so (ExecuteMterpImpl+30100)
#48 pc 000000000025d620 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameENS_6JValueEb+444)
#49 pc 0000000000263d20 /system/lib64/libart.so (_ZN3art11interpreter33ArtInterpreterToInterpreterBridgeEPNS_6ThreadEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameEPNS_6JValueE+212)
#50 pc 000000000027d6f4 /system/lib64/libart.so (_ZN3art11interpreter6DoCallILb1ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+584)
#51 pc 00000000004f3754 /system/lib64/libart.so (MterpInvokeDirectRange+424)
#52 pc 00000000004fb114 /system/lib64/libart.so (ExecuteMterpImpl+15252)
#53 pc 000000000025d620 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameENS_6JValueEb+444)
#54 pc 0000000000263d20 /system/lib64/libart.so (_ZN3art11interpreter33ArtInterpreterToInterpreterBridgeEPNS_6ThreadEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameEPNS_6JValueE+212)
#55 pc 000000000027d6f4 /system/lib64/libart.so (_ZN3art11interpreter6DoCallILb1ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+584)
#56 pc 00000000004f3754 /system/lib64/libart.so (MterpInvokeDirectRange+424)
#57 pc 00000000004fb114 /system/lib64/libart.so (ExecuteMterpImpl+15252)
#58 pc 000000000025d620 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameENS_6JValueEb+444)
#59 pc 0000000000263d20 /system/lib64/libart.so (_ZN3art11interpreter33ArtInterpreterToInterpreterBridgeEPNS_6ThreadEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameEPNS_6JValueE+212)
#60 pc 000000000027c884 /system/lib64/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+640)
#61 pc 00000000004f3d30 /system/lib64/libart.so (MterpInvokeVirtualQuick+680)
#62 pc 00000000004fea94 /system/lib64/libart.so (ExecuteMterpImpl+29972)
#63 pc 000000000025d620 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameENS_6JValueEb+444)


Mittwoch, 14. November 2018

Error: Could not generate unknown file: Attempt to reopen a file for path \app\build\generated\source\kapt\debug\






As I just wasted time watching a Youtube video, I need to keep it short:

This sucks







 error: Could not generate unknown file: Attempt to reopen a file for path C:\Users\app\app\build\generated\source\kapt\debug\de\injection\AppModule_ProvideAndroidStudioShowStopperFactory.java.

Donnerstag, 17. Mai 2018

Unable to load class 'com.intellij.core.JavaCoreApplicationEnvironment'.

Have you ever been in a hurry and when you want to build the apk for upload, things turn really bad?

Today I could compile and run the app - then it was time to upload the APK and suddenly got this:

Unable to load class 'com.intellij.core.JavaCoreApplicationEnvironment'.
Possible causes for this unexpected error include:<ul><li>Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)</li><li>The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)</li><li>Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.</li></ul>In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.


The internal IntelliJ / Android Studio log shows:


java.lang.ExceptionInInitializerError
    at com.intellij.psi.impl.source.tree.JavaJspElementType.<clinit>(JavaJspElementType.java:26)
    at com.intellij.psi.impl.source.tree.StdTokenSets.<clinit>(StdTokenSets.java:29)
    at com.intellij.psi.formatter.java.SimpleJavaBlock.processHeadCommentsAndWhiteSpaces(SimpleJavaBlock.java:117)
    at com.intellij.psi.formatter.java.SimpleJavaBlock.buildChildren(SimpleJavaBlock.java:64)
    at com.intellij.psi.formatter.common.AbstractBlock.getSubBlocks(AbstractBlock.java:61)
    at com.intellij.psi.formatter.common.NewLineBlocksIterator.pushAll(NewLineBlocksIterator.java:135)
    at com.intellij.psi.formatter.common.NewLineBlocksIterator.next(NewLineBlocksIterator.java:105)
    at com.intellij.psi.codeStyle.autodetect.FormatterBasedLineIndentInfoBuilder.getBlocksStartingNewLine(FormatterBasedLineIndentInfoBuilder.java:132)
    at com.intellij.psi.codeStyle.autodetect.FormatterBasedLineIndentInfoBuilder.build(FormatterBasedLineIndentInfoBuilder.java:56)
    at com.intellij.psi.codeStyle.autodetect.IndentOptionsDetectorImpl.calcLineIndentInfo(IndentOptionsDetectorImpl.java:102)
    at com.intellij.psi.codeStyle.autodetect.IndentOptionsDetectorImpl.getIndentOptionsAdjuster(IndentOptionsDetectorImpl.java:67)
    at com.intellij.psi.codeStyle.DetectAndAdjustIndentOptionsTask.performInReadAction(DetectAndAdjustIndentOptionsTask.java:85)
    at com.intellij.openapi.progress.util.ReadTask.lambda$runBackgroundProcess$0(ReadTask.java:66)
    at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:47)
    at com.intellij.openapi.progress.util.ReadTask.runBackgroundProcess(ReadTask.java:66)
    at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runUnderProgress$5(ProgressIndicatorUtils.java:238)
    at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:173)
    at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:157)
    at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:543)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:488)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:94)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:144)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:173)
    at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runUnderProgress(ProgressIndicatorUtils.java:236)
    at com.intellij.openapi.progress.util.ProgressIndicatorUtils.access$000(ProgressIndicatorUtils.java:47)
    at com.intellij.openapi.progress.util.ProgressIndicatorUtils$4.run(ProgressIndicatorUtils.java:187)
    at com.intellij.util.concurrency.BoundedTaskExecutor$2.run(BoundedTaskExecutor.java:212)
    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: com.intellij.openapi.progress.ProcessCanceledException
    at com.intellij.openapi.progress.util.AbstractProgressIndicatorBase.throwIfCanceled(AbstractProgressIndicatorBase.java:142)
    at com.intellij.openapi.progress.util.AbstractProgressIndicatorBase.checkCanceled(AbstractProgressIndicatorBase.java:133)
    at com.intellij.openapi.progress.util.AbstractProgressIndicatorExBase.checkCanceled(AbstractProgressIndicatorExBase.java:103)
    at com.intellij.openapi.progress.impl.CoreProgressManager.doCheckCanceled(CoreProgressManager.java:120)
    at com.intellij.openapi.progress.ProgressManager.checkCanceled(ProgressManager.java:206)
    at com.intellij.openapi.components.ServiceManager.doGetService(ServiceManager.java:51)
    at com.intellij.openapi.components.ServiceManager.getService(ServiceManager.java:39)
    at com.intellij.psi.jsp.JspSpiUtil.getJspSpiUtil(JspSpiUtil.java:55)
    at com.intellij.psi.jsp.JspSpiUtil.getJspElementType(JspSpiUtil.java:218)
    at com.intellij.psi.jsp.JspElementType.<clinit>(JspElementType.java:30)
    ... 30 more


java.lang.ClassCastException: com.intellij.ide.ExceptionRegistry$StackFrame cannot be cast to com.intellij.ide.ExceptionRegistry$LeafFrame
    at com.intellij.ide.ExceptionRegistry$StackFrame.addLeaf(ExceptionRegistry.kt:242)
    at com.intellij.ide.ExceptionRegistry.addFrames(ExceptionRegistry.kt:170)
    at com.intellij.ide.ExceptionRegistry.register(ExceptionRegistry.kt:118)
    at com.intellij.diagnostic.DefaultIdeaErrorLogger.handle(DefaultIdeaErrorLogger.java:93)
    at com.intellij.diagnostic.DialogAppender.lambda$appendToLoggers$1(DialogAppender.java:96)
    at com.intellij.openapi.application.impl.ApplicationImpl$1.run(ApplicationImpl.java:315)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    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)


java.lang.ClassCastException: com.intellij.ide.ExceptionRegistry$StackFrame cannot be cast to com.intellij.ide.ExceptionRegistry$LeafFrame
    at com.intellij.ide.ExceptionRegistry$StackFrame.addLeaf(ExceptionRegistry.kt:242)
    at com.intellij.ide.ExceptionRegistry.addFrames(ExceptionRegistry.kt:170)
    at com.intellij.ide.ExceptionRegistry.register(ExceptionRegistry.kt:118)
    at com.intellij.diagnostic.DefaultIdeaErrorLogger.handle(DefaultIdeaErrorLogger.java:93)
    at com.intellij.diagnostic.DialogAppender.lambda$appendToLoggers$1(DialogAppender.java:96)
    at com.intellij.openapi.application.impl.ApplicationImpl$1.run(ApplicationImpl.java:315)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    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)


java.lang.ClassCastException: com.intellij.ide.ExceptionRegistry$StackFrame cannot be cast to com.intellij.ide.ExceptionRegistry$LeafFrame
    at com.intellij.ide.ExceptionRegistry$StackFrame.addLeaf(ExceptionRegistry.kt:242)
    at com.intellij.ide.ExceptionRegistry.addFrames(ExceptionRegistry.kt:170)
    at com.intellij.ide.ExceptionRegistry.register(ExceptionRegistry.kt:118)
    at com.intellij.diagnostic.DefaultIdeaErrorLogger.handle(DefaultIdeaErrorLogger.java:93)
    at com.intellij.diagnostic.DialogAppender.lambda$appendToLoggers$1(DialogAppender.java:96)
    at com.intellij.openapi.application.impl.ApplicationImpl$1.run(ApplicationImpl.java:315)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    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)


java.lang.ClassCastException: com.intellij.ide.ExceptionRegistry$StackFrame cannot be cast to com.intellij.ide.ExceptionRegistry$LeafFrame
    at com.intellij.ide.ExceptionRegistry$StackFrame.addLeaf(ExceptionRegistry.kt:242)
    at com.intellij.ide.ExceptionRegistry.addFrames(ExceptionRegistry.kt:170)
    at com.intellij.ide.ExceptionRegistry.register(ExceptionRegistry.kt:118)
    at com.intellij.diagnostic.DefaultIdeaErrorLogger.handle(DefaultIdeaErrorLogger.java:93)
    at com.intellij.diagnostic.DialogAppender.lambda$appendToLoggers$1(DialogAppender.java:96)
    at com.intellij.openapi.application.impl.ApplicationImpl$1.run(ApplicationImpl.java:315)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    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)

Donnerstag, 22. März 2018

Exception For input string: "com.crashlytics.useFirebaseAppId" (Android)

Exception For input string: "com.crashlytics.useFirebaseAppId"


Sometimes Android development is really time consuming and you keep on looking for issues for a long-time - such as in the following case:

  1. App starts on real device and emulator (phone)
  2. App crashes e.g. on tablet (both physical device and emulator)

In this case you would assume a proper error message, indicating some layout issues.

No.

Instead no error message. When starting in Debug mode, the first exception it stops at is:

Exception For input string: "com.crashlytics.useFirebaseAppId" (Android)

WTF? com.crashlytics.useFirebaseAppId

So it seems like to require (now) some kind of FirebaseApp id which is missing and it uses a String that leads to a crash. 

Unfortunately also adding:

fabric.properties


USE_FIREBASE_APP_ID=false 


strings.xml



<string name="com.crashlytics.useFirebaseAppId">false</string>


has NOT helped.

This refers to:

implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {
    transitive = true}

Mittwoch, 17. Januar 2018

Unknown failure (at android.os.Binder.execTransact(Binder.java:565)) Error while Installing APKs

Have you ever had:

Unknown failure (at android.os.Binder.execTransact(Binder.java:565))
Error while Installing APKs


while installing an APK on an emulator from Android Studio?

Try that:

Step 1: Go to “Setting” → find “Developer options” in System, and click.
Step 2: TURN ON “Verify apps over USB” in Debbuging section.
Step 3: Try “Run app” in Android Studio again!

Starting a native Android app in 2018? What technologies you should consider...

If you start developing a new native Android app from scratch in 2018, you should consider the following technologies / libraries:

MUSTs

  • Dagger 2
  • Glide by Bum Technologies
  • Gson by GOogle
  • OkHttp by Square
  • Retrofit by Square
  • Support AppCompat & Support Design by AOSP
  • Support RecyclerView
  • Support

 Recommended

  • Glide Transformations by Daichi Furiya
  • RxAndroid by ReactiveX
  • RxJava by ReactiveX

Nice to have

  • AdapterDelegates by Hannes Dorfmann
  • FastAdapter by Mike Penz
  • flexbox by FlexboxLayout
  • greenDAO3 by greenrobot
  • Mosby by Hannes Dormann
  • RecylerviewAnimations by Daichi Furiya
  • Recyclerview FastScroller by Tim Malseed