Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

APK builds and installs correctly but it crashes in runtime #1703

Open
arya6000 opened this Issue Jan 3, 2018 · 7 comments

Comments

Projects
None yet
5 participants
@arya6000
Copy link

arya6000 commented Jan 3, 2018

Information

  1. Apktool Version (apktool -version) - 2.3.1
  2. Operating System (Mac, Linux, Windows) - Linux Mint 18
  3. APK From? (Playstore, ROM, Other) - apkmirror.com

Stacktrace/Logcat

01-03 10:21:06.523 31043 31156 E AndroidRuntime: FATAL EXCEPTION: RxIoScheduler-14
01-03 10:21:06.523 31043 31156 E AndroidRuntime: Process: com.tinder, PID: 31043
01-03 10:21:06.523 31043 31156 E AndroidRuntime: java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread.
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:59)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at java.lang.Thread.run(Thread.java:818)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: Caused by: java.lang.ExceptionInInitializerError
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoader.<clinit>(BuiltInsLoader.kt)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.impl.builtins.KotlinBuiltIns.createBuiltInsModule(KotlinBuiltIns.java:150)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.impl.platform.JvmBuiltIns.<init>(JvmBuiltIns.kt:56)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.impl.platform.JvmBuiltIns.<init>(JvmBuiltIns.kt:31)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.impl.load.kotlin.reflect.RuntimeModuleData$Companion.create(RuntimeModuleData.kt:54)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.ModuleByClassLoaderKt.getOrCreateModule(moduleByClassLoader.kt:58)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.KDeclarationContainerImpl$Data$moduleData$2.invoke(KDeclarationContainerImpl.kt:35)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.KDeclarationContainerImpl$Data$moduleData$2.invoke(KDeclarationContainerImpl.kt:32)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.KDeclarationContainerImpl$Data.getModuleData(KDeclarationContainerImpl.kt)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor$2.invoke(KClassImpl.kt:46)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.KClassImpl$Data$descriptor$2.invoke(KClassImpl.kt:43)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.KClassImpl$Data.getDescriptor(KClassImpl.kt)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.KClassImpl.getDescriptor(KClassImpl.kt:172)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.KClassImpl.getConstructorDescriptors(KClassImpl.kt:186)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors$2.invoke(KClassImpl.kt:90)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors$2.invoke(KClassImpl.kt:43)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.KClassImpl$Data.getConstructors(KClassImpl.kt)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.jvm.internal.KClassImpl.getConstructors(KClassImpl.kt:222)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at kotlin.reflect.full.a.a(KClasses.kt:40)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at com.squareup.moshi.p.create(KotlinJsonAdapter.kt:160)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at com.squareup.moshi.s.a(Moshi.java:100)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at com.squareup.moshi.s.a(Moshi.java:62)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at com.tinder.api.response.v2.AutoValue_DataResponse$MoshiJsonAdapter.<init>(AutoValue_DataResponse.java:25)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at com.tinder.api.response.v2.DataResponse.jsonAdapter(DataResponse.java:27)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at com.tinder.api.moshi.AutoValueMoshi_TinderMoshiAdapterFactory.create(AutoValueMoshi_TinderMoshiAdapterFactory.java:83)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at com.squareup.moshi.s.a(Moshi.java:100)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at retrofit2.converter.moshi.MoshiConverterFactory.responseBodyConverter(MoshiConverterFactory.java:91)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:330)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at retrofit2.Retrofit.responseBodyConverter(Retrofit.java:313)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at retrofit2.ServiceMethod$Builder.createResponseConverter(ServiceMethod.java:736)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:169)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at java.lang.reflect.Proxy.invoke(Proxy.java:393)
01-03 10:21:06.523 31043 31156 E AndroidRuntime: 	at com.tinde
01-03 10:21:06.528  1861  3639 W ActivityManager:   Force finishing activity com.tinder/.activities.ActivityMain

Steps to Reproduce

  1. java -jar apktool.jar d com.tinder.apk
  2. java -jar apktool.jar b com.tinder -o new_apk.apk (I got about 50 warnings for this step. No errors)
  3. keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
  4. jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore new_apk.apk alias_name
  5. adb install new_apk.apk

Frameworks

If this APK is from an OEM ROM (Samsung, HTC, LG). Please attach framework files
(.apks that live in /system/framework or /system/priv-app)

APK

If this APK can be freely shared, please upload/attach a link to it.
https://www.apkmirror.com/apk/tinder/tinder-tinder/tinder-tinder-8-4-1-release/tinder-8-4-1-android-apk-download/

Questions to ask before submission

  1. Have you tried apktool d, apktool b without changing anything? Yes
  2. If you are trying to install a modified apk, did you resign it? Not modified, but I did resign it
  3. Are you using the latest apktool version? Yes

After installing the repackaged APK the app opens with no errors, and I can login to Facebook successfully. However after logging in, the app crashes with the logcat message.

@iBotPeaches

This comment has been minimized.

Copy link
Owner

iBotPeaches commented Jan 8, 2018

Interesting. I wonder if this is at the source or resource level or somewhere during the rebuild process. Kotlin must be involved somehow.

I've downloaded application and thats about it.

@NothingMore0x11

This comment has been minimized.

Copy link

NothingMore0x11 commented Feb 5, 2018

A similar issue, likely related to kotlin, appears in the package com.xfinity.cloudtvr available on the US Google play store. I have tried the latest version of apktool both with -r and -s (as well as all combinations of those parameters without any changes to the APK or its assets). The resulting apk throws the same exception seen above.

One thing of note: When comparing the original APK with the output APK from apktool, a kotlin top level directory present in the original is missing in the output (./kotlin is in the original but missing entirely from the output). This may be a regression of Issue #1520 and may be what is causing these issues. I have yet to try your commit at 93d61cc that originally fixed this issue to confirm however.

@iBotPeaches

This comment has been minimized.

Copy link
Owner

iBotPeaches commented Feb 5, 2018

Thanks for the research. I was pretty sure I wrote a test for this, but I guess not. I'll take another look for that directory to ensure its being treated properly.

@NothingMore0x11

This comment has been minimized.

Copy link

NothingMore0x11 commented Feb 7, 2018

I have tracked down the issue I am seeing. Basically what is going on is that the kotlin directory is simply not being copied in Androlib.java during the build process (void build(ExtFile appDir, File outFile)). Locally I have fixed this issue by adding a buildlibrary call to copy the kotlin directory (i.e. buildLibrary(appDir, "kotlin");).

I am not sure if this will resolve the issue the original poster had and I am not sure if this is the correct way to fix this issue (i.e. falling in line with the coding style/convention of the project, likely should be a call such as buildKotlin() or something similar). I can make this small patch available if desired (though you can likely make the patch in 10 seconds yourself).

@iBotPeaches

This comment has been minimized.

Copy link
Owner

iBotPeaches commented Feb 7, 2018

Thanks for the research. That was indeed it. This does pose an interesting problem. Here is the original application:

➜  Bug1703 unzip -l tinder.apk | grep kotlin
     5995  00-00-1980 00:00   META-INF/Tinder_release.kotlin_module
      158  00-00-1980 00:00   META-INF/aggregator_release.kotlin_module
       78  00-00-1980 00:00   META-INF/api_release.kotlin_module
     2675  00-00-1980 00:00   META-INF/core.kotlin_module
     1816  00-00-1980 00:00   META-INF/data_release.kotlin_module
      363  00-00-1980 00:00   META-INF/domain_release.kotlin_module
       80  00-00-1980 00:00   META-INF/engine_release.kotlin_module
      360  00-00-1980 00:00   META-INF/kotlin-reflection.kotlin_module
      246  00-00-1980 00:00   META-INF/kotlin-runtime.kotlin_module
       43  00-00-1980 00:00   META-INF/kotlin-stdlib-jre7.kotlin_module
     2190  00-00-1980 00:00   META-INF/kotlin-stdlib.kotlin_module
       59  00-00-1980 00:00   META-INF/moshi-kotlin.kotlin_module
      187  00-00-1980 00:00   META-INF/purchase_release.kotlin_module
      121  00-00-1980 00:00   META-INF/services/kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoader
      471  00-00-1980 00:00   META-INF/services/kotlin.reflect.jvm.internal.impl.resolve.ExternalOverridabilityCondition
       59  00-00-1980 00:00   META-INF/shimmy_release.kotlin_module
      782  00-00-1980 00:00   META-INF/superlikeable_release.kotlin_module
       57  00-00-1980 00:00   META-INF/tooltip_release.kotlin_module
      303  00-00-1980 00:00   META-INF/util.runtime.kotlin_module
      926  00-00-1980 00:00   kotlin/annotation/annotation.kotlin_builtins
     3689  00-00-1980 00:00   kotlin/collections/collections.kotlin_builtins
      726  00-00-1980 00:00   kotlin/internal/internal.kotlin_builtins
    14202  00-00-1980 00:00   kotlin/kotlin.kotlin_builtins
     2296  00-00-1980 00:00   kotlin/ranges/ranges.kotlin_builtins
     4866  00-00-1980 00:00   kotlin/reflect/reflect.kotlin_builtins

Bringing notice to the kotlin files in META-INF. Now the decoded and rebuilt application.

➜  dist unzip -l tinder.apk | grep kotlin
      926  12-31-1980 19:00   kotlin/annotation/annotation.kotlin_builtins
     3689  12-31-1980 19:00   kotlin/collections/collections.kotlin_builtins
      726  12-31-1980 19:00   kotlin/internal/internal.kotlin_builtins
    14202  12-31-1980 19:00   kotlin/kotlin.kotlin_builtins
     2296  12-31-1980 19:00   kotlin/ranges/ranges.kotlin_builtins
     4866  12-31-1980 19:00   kotlin/reflect/reflect.kotlin_builtins
➜  dist 

We obviously strip signatures so those kotlin META-INF files are gone. You can preserve them however using the -c flag during decode and build. Patch should be up soon, not sure if it'll resolve this as I haven't tested on device yet but will do that when able.

@ibuprophen1

This comment has been minimized.

Copy link

ibuprophen1 commented Aug 6, 2018

After just locating this issue, I just wanted to bring the following to your attention since it's regarding a similar situation as described and updated as well...

#1860

Thanks a bunch! 👍

~Ibuprophen

@pandasauce

This comment has been minimized.

Copy link

pandasauce commented Sep 14, 2018

Facing same problem on a Kotlin app. Using --copy-original results in Kotlin files being copied over, but gives INSTALL_PARSE_FAILED_NO_CERTIFICATES on installation. I did manually sign it with jarsigner.

EDIT: if using --copy-original the RSA, SF and MF files need to be manually purged from META-INF prior to signing the APK with jarsigner.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.