14
14
* limitations under the License.
15
15
*/
16
16
17
- #include " app/src/include/firebase/app.h"
18
-
19
17
#include < jni.h>
20
18
#include < string.h>
19
+
21
20
#include < string>
22
21
23
22
#include " app/src/app_common.h"
24
23
#include " app/src/assert.h"
25
24
#include " app/src/google_play_services/availability_android.h"
25
+ #include " app/src/include/firebase/app.h"
26
26
#include " app/src/include/firebase/version.h"
27
27
#include " app/src/log.h"
28
28
#include " app/src/util.h"
@@ -117,6 +117,26 @@ METHOD_LOOKUP_DEFINITION(options,
117
117
" com/google/firebase/FirebaseOptions" ,
118
118
FIREBASE_OPTIONS_METHODS)
119
119
120
+ // clang-format off
121
+ #define GLOBAL_LIBRARY_VERSION_REGISTAR_METHODS (X ) \
122
+ X (GetInstance, " getInstance" , \
123
+ " ()Lcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar;" , \
124
+ util::kMethodTypeStatic ), \
125
+ X (RegisterVersion, " registerVersion" , \
126
+ " (Ljava/lang/String;Ljava/lang/String;)V" , \
127
+ util::kMethodTypeInstance ), \
128
+ X (GetRegisteredVersions, " getRegisteredVersions" , " ()Ljava/util/Set;" , \
129
+ util::kMethodTypeInstance )
130
+ // clang-format on
131
+
132
+ METHOD_LOOKUP_DECLARATION (version_registrar,
133
+ GLOBAL_LIBRARY_VERSION_REGISTAR_METHODS)
134
+ METHOD_LOOKUP_DEFINITION (
135
+ version_registrar,
136
+ PROGUARD_KEEP_CLASS
137
+ " com/google/firebase/platforminfo/GlobalLibraryVersionRegistrar" ,
138
+ GLOBAL_LIBRARY_VERSION_REGISTAR_METHODS)
139
+
120
140
const char * kDefaultAppName = " __FIRAPP_DEFAULT" ;
121
141
122
142
namespace {
@@ -137,6 +157,7 @@ bool CacheMethods(JNIEnv* env, jobject activity) {
137
157
if (!(app::CacheMethodIds (env, activity) &&
138
158
options_builder::CacheMethodIds (env, activity) &&
139
159
options::CacheMethodIds (env, activity) &&
160
+ version_registrar::CacheMethodIds (env, activity) &&
140
161
google_play_services::Initialize (env, activity))) {
141
162
ReleaseClasses (env);
142
163
return false ;
@@ -152,6 +173,7 @@ void ReleaseClasses(JNIEnv* env) {
152
173
app::ReleaseClass (env);
153
174
options_builder::ReleaseClass (env);
154
175
options::ReleaseClass (env);
176
+ version_registrar::ReleaseClass (env);
155
177
google_play_services::Terminate (env);
156
178
util::Terminate (env);
157
179
}
@@ -410,7 +432,30 @@ App* App::GetInstance(const char* name) {
410
432
411
433
JNIEnv* App::GetJNIEnv () const { return util::GetThreadsafeJNIEnv (java_vm ()); }
412
434
435
+ static void RegisterLibraryWithVersionRegistrar (JNIEnv* env,
436
+ const char * library,
437
+ const char * version) {
438
+ jobject registrar = env->CallStaticObjectMethod (
439
+ version_registrar::GetClass (),
440
+ version_registrar::GetMethodId (version_registrar::kGetInstance ));
441
+ util::CheckAndClearJniExceptions (env);
442
+ FIREBASE_ASSERT (registrar != nullptr );
443
+
444
+ jstring library_string = env->NewStringUTF (library);
445
+ jstring version_string = env->NewStringUTF (version);
446
+ env->CallVoidMethod (
447
+ registrar,
448
+ version_registrar::GetMethodId (version_registrar::kRegisterVersion ),
449
+ library_string, version_string);
450
+ util::CheckAndClearJniExceptions (env);
451
+ env->DeleteLocalRef (version_string);
452
+ env->DeleteLocalRef (library_string);
453
+ env->DeleteLocalRef (registrar);
454
+ }
455
+
413
456
void App::RegisterLibrary (const char * library, const char * version) {
457
+ RegisterLibraryWithVersionRegistrar (util::GetJNIEnvFromApp (), library,
458
+ version);
414
459
app_common::RegisterLibrary (library, version);
415
460
}
416
461
0 commit comments