Skip to content

API 34 Firebase crash on App::Create with C++ SDK - it works ok on API 33 built #117

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

Closed
welmas opened this issue Aug 17, 2023 · 4 comments
Closed
Assignees
Labels

Comments

@welmas
Copy link

welmas commented Aug 17, 2023

[READ] For Firebase C++ SDK issues, please report to Firebase C++ open-source

Once you've read this section and determined that your issue is appropriate for this repository, please delete this section.

[REQUIRED] Please fill in the following fields:

  • Which Firebase Sample: *APP_ (Auth, Database, etc.)
  • Firebase C++ SDK version: 11.0.4_
  • Additional SDKs you are using: _none (Facebook, AdMob, etc.)
  • Platform you are using the SDK on: _Android (Mac, Windows, or Linux)
  • Platform you are targeting: android API 34___ (iOS, Android, and/or desktop)

[REQUIRED] Please describe the issue here:

only on API 34. issue is the jar file permission set rw--
my guess api 34 wants to see a read-only app_resources_lib.jar in cache directory

java_vm_ext.cc:591] JNI DETECTED ERROR IN APPLICATION: JNI NewStringUTF called with pending exception java.lang.SecurityException: Writable dex file '/data/user/0/com.xxxxx.xxxxxx/cache/app_resources_lib.jar' is not allowed.
java_vm_ext.cc:591] at java.lang.Object dalvik.system.DexFile.openDexFileNative(java.lang.String, java.lang.String, int, java.lang.ClassLoader, dalvik.system.DexPathList$Element[]) (DexFile.java:-2)
java_vm_ext.cc:591] at java.lang.Object dalvik.system.DexFile.openDexFile(java.lang.String, java.lang.String, int, java.lang.ClassLoader, dalvik.system.DexPathList$Element[]) (DexFile.java:406)
java_vm_ext.cc:591] at void dalvik.system.DexFile.(java.lang.String, java.lang.ClassLoader, dalvik.system.DexPathList$Element[]) (DexFile.java:128)
java_vm_ext.cc:591] at void dalvik.system.DexFile.(java.io.File, java.lang.ClassLoader, dalvik.system.DexPathList$Element[]) (DexFile.java:101)
java_vm_ext.cc:591] at dalvik.system.DexFile dalvik.system.DexPathList.loadDexFile(java.io.File, java.io.File, java.lang.ClassLoader, dalvik.system.DexPathList$Element[]) (DexPathList.java:438)
java_vm_ext.cc:591] at dalvik.system.DexPathList$Element[] dalvik.system.DexPathList.makeDexElements(java.util.List, java.io.File, java.util.List, java.lang.ClassLoader, boolean) (DexPathList.java:397)
java_vm_ext.cc:591] at void dalvik.system.DexPathList.(java.lang.ClassLoader, java.lang.String, java.lang.String, java.io.File, boolean) (DexPathList.java:166)
java_vm_ext.cc:591] at void dalvik.system.BaseDexClassLoader.(java.lang.String, java.lang.String, java.lang.ClassLoader, java.lang.ClassLoader[], java.lang.ClassLoader[], boolean) (BaseDexClassLoader.java:160)
java_vm_ext.cc:591] at void dalvik.system.BaseDexClassLoader.(java.lang.String, java.io.File, java.lang.String, java.lang.ClassLoader) (BaseDexClassLoader.java:105)
java_vm_ext.cc:591] at void dalvik.system.DexClassLoader.(java.lang.String, java.lang.String, java.lang.String, java.lang.ClassLoader) (DexClassLoader.java:55)
java_vm_ext.cc:591] at java.lang.String com.com.xxxxx.xxxxxx.MainActivity.stringFromJNI() (MainActivity.java:-2)
java_vm_ext.cc:591] at void com.com.xxxxx.xxxxxx.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:28)
java_vm_ext.cc:591] at void android.app.Activity.performCreate(android.os.Bundle, android.os.PersistableBundle) (Activity.java:8595)
java_vm_ext.cc:591] at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:8573)
java_vm_ext.cc:591] at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1456)
java_vm_ext.cc:591] at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:3764)
java_vm_ext.cc:591] at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, int, android.content.Intent) (ActivityThread.java:3922)
java_vm_ext.cc:591] at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:103)
java_vm_ext.cc:591] at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:139)
java_vm_ext.cc:591] at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:96)
java_vm_ext.cc:591] at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:2443)
java_vm_ext.cc:591] at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
java_vm_ext.cc:591] at boolean android.os.Looper.loopOnce(android.os.Looper, long, int) (Looper.java:205)
java_vm_ext.cc:591] at void android.os.Looper.loop() (Looper.java:294)
java_vm_ext.cc:591] at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:8176)
java_vm_ext.cc:591] at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
java_vm_ext.cc:591] at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:552)
java_vm_ext.cc:591] at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:971)
java_vm_ext.cc:591]

@welmas welmas added the new label Aug 17, 2023
@welmas
Copy link
Author

welmas commented Aug 17, 2023

crash starts with this --> Attempt to load writable dex file: /data/user/0/com.xxxxx.xxxxxx/cache/app_resources_lib.jar

@welmas
Copy link
Author

welmas commented Aug 19, 2023

//extern
App *app;
//-----------------

extern "C" JNIEXPORT jstring JNICALL
Java_com_xxxxx_xxxxxxx_MainActivity_stringFromJNI( JNIEnv* env, jobject thiz) {

std::string hello = "Hello from C++";

app = ::firebase::App::Create(::firebase::AppOptions(), env, thiz);

return env->NewStringUTF(hello.c_str());

}

@jonsimantov
Copy link
Contributor

jonsimantov commented Aug 19, 2023

This looks like it's probably related to a change in more recent versions of Android that affects how we run dynamic code: https://developer.android.com/about/versions/14/behavior-changes-14#safer-dynamic-code-loading

We'll get working on a fix as suggested in that doc.

Thanks for bringing this to our attention!

@jonsimantov
Copy link
Contributor

This has been fixed in firebase/firebase-cpp-sdk#1430 and will be included in the next SDK release (11.5.0). Thanks for the bug report!

@firebase firebase locked and limited conversation to collaborators Oct 12, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

2 participants