firebase / quickstart-cpp

Firebase Quickstart Samples for C++
https://firebase.google.com/games
Apache License 2.0
206 stars 122 forks source link

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

Closed welmas closed 9 months ago

welmas commented 10 months ago

[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:

[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 commented 10 months ago

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

welmas commented 10 months ago

//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 commented 10 months ago

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 commented 9 months ago

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