Skip to content

Commit f9cc2c0

Browse files
committed
merge main with windows boringSSL build patch.
2 parents 874b068 + c651636 commit f9cc2c0

File tree

10 files changed

+130
-71
lines changed

10 files changed

+130
-71
lines changed

Android/firebase_dependencies.gradle

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,10 @@ import org.gradle.util.ConfigureUtil;
1717
// A map of library to the dependencies that need to be added for it.
1818
def firebaseDependenciesMap = [
1919
'app' : ['com.google.firebase:firebase-analytics:21.0.0'],
20+
'play_services' : ['com.google.android.gms:play-services-base:18.0.1'],
2021
'admob' : ['com.google.firebase:firebase-ads:19.8.0',
21-
'com.google.firebase:firebase-analytics:21.0.0',
22-
'com.google.android.gms:play-services-base:18.0.1'],
23-
'analytics' : ['com.google.firebase:firebase-analytics:21.0.0',
24-
'com.google.android.gms:play-services-base:18.0.1'],
22+
'com.google.firebase:firebase-analytics:21.0.0'],
23+
'analytics' : ['com.google.firebase:firebase-analytics:21.0.0'],
2524
'auth' : ['com.google.firebase:firebase-auth:21.0.3'],
2625
'database' : ['com.google.firebase:firebase-database:20.0.5'],
2726
'dynamic_links' : ['com.google.firebase:firebase-dynamic-links:21.0.1'],
@@ -30,18 +29,15 @@ def firebaseDependenciesMap = [
3029
'gma' : ['com.google.android.gms:play-services-ads:20.6.0',
3130
'com.google.firebase:firebase-analytics:21.0.0',
3231
'com.google.android.gms:play-services-base:18.0.1'],
33-
'installations' : ['com.google.firebase:firebase-installations:17.0.1',
34-
'com.google.android.gms:play-services-base:18.0.1'],
32+
'installations' : ['com.google.firebase:firebase-installations:17.0.1'],
3533
'invites' : ['com.google.firebase:firebase-invites:17.0.0'],
3634
// Messaging has an additional local dependency to include.
3735
'messaging' : ['com.google.firebase:firebase-messaging:23.0.4',
3836
'firebase_cpp_sdk.messaging:messaging_java',
3937
'androidx.core:core:1.6.0-alpha03',
40-
'com.google.flatbuffers:flatbuffers-java:1.12.0',
41-
'com.google.android.gms:play-services-base:18.0.1'],
38+
'com.google.flatbuffers:flatbuffers-java:1.12.0'],
4239
'performance' : ['com.google.firebase:firebase-perf:20.0.6'],
43-
'remote_config' : ['com.google.firebase:firebase-config:21.1.0',
44-
'com.google.android.gms:play-services-base:18.0.1'],
40+
'remote_config' : ['com.google.firebase:firebase-config:21.1.0'],
4541
'storage' : ['com.google.firebase:firebase-storage:20.0.1'],
4642
'testlab' : []
4743
]
@@ -72,6 +68,10 @@ class Dependencies {
7268

7369
def getApp() {
7470
libSet.add('app')
71+
libSet.add('play_services')
72+
}
73+
def getAppWithoutPlayServices() {
74+
libSet.add('app')
7575
}
7676
def getAdmob() {
7777
libSet.add('admob')
@@ -153,6 +153,7 @@ project.afterEvaluate {
153153
// App is required, so add it if it wasn't included.
154154
if (!firebaseCpp.dependencies.libSet.contains('app')) {
155155
firebaseCpp.dependencies.libSet.add('app')
156+
firebaseCpp.dependencies.libSet.add('play_services')
156157
}
157158

158159
for (String lib : firebaseCpp.dependencies.libSet) {

admob/integration_test/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,10 @@ android {
7575
}
7676

7777
apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
78+
// AdMob doesn't require play-services-base as a dependency, so include the
79+
// version of App without it, to ensure the C++ SDK also doesn't require it.
7880
firebaseCpp.dependencies {
81+
appWithoutPlayServices
7982
admob
8083
}
8184

app/src/app_android.cc

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ METHOD_LOOKUP_DEFINITION(
150150
namespace {
151151

152152
static int g_methods_cached_count = 0;
153+
static bool g_initialized_google_play_services = false;
153154

154155
void ReleaseClasses(JNIEnv* env);
155156

@@ -165,11 +166,13 @@ bool CacheMethods(JNIEnv* env, jobject activity) {
165166
if (!(app::CacheMethodIds(env, activity) &&
166167
options_builder::CacheMethodIds(env, activity) &&
167168
options::CacheMethodIds(env, activity) &&
168-
version_registrar::CacheMethodIds(env, activity) &&
169-
google_play_services::Initialize(env, activity))) {
169+
version_registrar::CacheMethodIds(env, activity))) {
170170
ReleaseClasses(env);
171171
return false;
172172
}
173+
if (google_play_services::Initialize(env, activity)) {
174+
g_initialized_google_play_services = true;
175+
}
173176
}
174177
return true;
175178
}
@@ -182,7 +185,10 @@ void ReleaseClasses(JNIEnv* env) {
182185
options_builder::ReleaseClass(env);
183186
options::ReleaseClass(env);
184187
version_registrar::ReleaseClass(env);
185-
google_play_services::Terminate(env);
188+
if (g_initialized_google_play_services) {
189+
google_play_services::Terminate(env);
190+
g_initialized_google_play_services = false;
191+
}
186192
util::Terminate(env);
187193
}
188194
}

app/src/util.cc

Lines changed: 44 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
#include "app/src/include/firebase/internal/platform.h"
2626

2727
#if FIREBASE_PLATFORM_ANDROID
28+
#include "app/src/google_play_services/availability_android.h"
2829
#include "app/src/include/google_play_services/availability.h"
30+
#include "app/src/util_android.h"
2931
#endif // FIREBASE_PLATFORM_ANDROID
3032
#include "app/src/include/firebase/internal/mutex.h"
3133
#include "app/src/log.h"
@@ -77,32 +79,49 @@ static void PerformInitialize(ModuleInitializerData* data) {
7779

7880
#if FIREBASE_PLATFORM_ANDROID
7981
if (init_result == kInitResultFailedMissingDependency) {
80-
// On Android, we need to update or activate Google Play services
81-
// before we can initialize this Firebase module.
82-
LogWarning("Google Play services unavailable, trying to fix.");
83-
84-
Future<void> make_available = google_play_services::MakeAvailable(
85-
data->app->GetJNIEnv(), data->app->activity());
86-
87-
make_available.OnCompletion(
88-
[](const Future<void>& result, void* ptr) {
89-
ModuleInitializerData* data =
90-
reinterpret_cast<ModuleInitializerData*>(ptr);
91-
if (result.status() == kFutureStatusComplete) {
92-
if (result.error() == 0) {
93-
LogInfo("Google Play services now available, continuing.");
94-
PerformInitialize(data);
95-
} else {
96-
LogError("Google Play services still unavailable.");
97-
int num_remaining = data->init_fns.size() - data->init_fn_idx;
98-
data->future_impl.Complete(
99-
data->future_handle_init, num_remaining,
100-
"Unable to initialize due to missing Google Play services "
101-
"dependency.");
82+
// Note: If Initialize here succeeds, google_play_services::Terminate
83+
// is called in the OnCompletion handler below. Note that these
84+
// are reference-counted so it's safe to init/terminate an extra time..
85+
if (google_play_services::Initialize(data->app->GetJNIEnv(),
86+
data->app->activity())) {
87+
// On Android, we need to update or activate Google Play services
88+
// before we can initialize this Firebase module.
89+
LogWarning("Google Play services unavailable, trying to fix.");
90+
91+
Future<void> make_available = google_play_services::MakeAvailable(
92+
data->app->GetJNIEnv(), data->app->activity());
93+
94+
make_available.OnCompletion(
95+
[](const Future<void>& result, void* ptr) {
96+
ModuleInitializerData* data =
97+
reinterpret_cast<ModuleInitializerData*>(ptr);
98+
if (result.status() == kFutureStatusComplete) {
99+
if (result.error() == 0) {
100+
LogInfo("Google Play services now available, continuing.");
101+
PerformInitialize(data);
102+
google_play_services::Terminate(data->app->GetJNIEnv());
103+
} else {
104+
LogError("Google Play services still unavailable.");
105+
int num_remaining = data->init_fns.size() - data->init_fn_idx;
106+
data->future_impl.Complete(data->future_handle_init,
107+
num_remaining,
108+
"Unable to initialize due to "
109+
"missing Google Play services "
110+
"dependency.");
111+
google_play_services::Terminate(util::GetJNIEnvFromApp());
112+
}
102113
}
103-
}
104-
},
105-
data);
114+
},
115+
data);
116+
} else {
117+
int num_remaining = data->init_fns.size() - data->init_fn_idx;
118+
data->future_impl.Complete(
119+
data->future_handle_init, num_remaining,
120+
"Could not run Google Play services update due to app "
121+
"misconfiguration. Please add "
122+
"com.google.android.gms:play-services-base as an Android "
123+
"dependency to enable this functionality.");
124+
}
106125
}
107126
#else // !FIREBASE_PLATFORM_ANDROID
108127
// Outside of Android, we shouldn't get kInitResultFailedMissingDependency.

app/src/util_android.cc

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,8 @@ static pthread_mutex_t g_task_callbacks_mutex;
246246
// classes.
247247
static std::vector<jobject>* g_class_loaders;
248248

249+
static bool g_jniresultcallback_loaded = false;
250+
249251
JNIEXPORT void JNICALL JniResultCallback_nativeOnResult(
250252
JNIEnv* env, jobject clazz, jobject result, jboolean success,
251253
jboolean cancelled, jstring status_message, jlong callback_fn_param,
@@ -395,7 +397,10 @@ static void ReleaseClasses(JNIEnv* env) {
395397
uri::ReleaseClass(env);
396398
object::ReleaseClass(env);
397399
uribuilder::ReleaseClass(env);
398-
jniresultcallback::ReleaseClass(env);
400+
if (g_jniresultcallback_loaded) {
401+
jniresultcallback::ReleaseClass(env);
402+
g_jniresultcallback_loaded = false;
403+
}
399404
JavaThreadContext::Terminate(env);
400405
#if defined(FIREBASE_ANDROID_FOR_DESKTOP)
401406
java_uri::ReleaseClass(env);
@@ -529,12 +534,13 @@ bool Initialize(JNIEnv* env, jobject activity_object) {
529534
return false;
530535
}
531536

532-
if (!(jniresultcallback::CacheClassFromFiles(env, activity_object,
533-
&embedded_files) &&
534-
jniresultcallback::CacheMethodIds(env, activity_object) &&
535-
jniresultcallback::RegisterNatives(env, &kJniCallbackMethod, 1))) {
536-
return false;
537-
}
537+
// With a subset of dependencies, jniresultcallback can't be loaded due to
538+
// lack of gms.Task. This is fine - just make sure not to try terminating it.
539+
g_jniresultcallback_loaded =
540+
(jniresultcallback::CacheClassFromFiles(env, activity_object,
541+
&embedded_files) &&
542+
jniresultcallback::CacheMethodIds(env, activity_object) &&
543+
jniresultcallback::RegisterNatives(env, &kJniCallbackMethod, 1));
538544

539545
if (!JavaThreadContext::Initialize(env, activity_object, embedded_files)) {
540546
return false;

cmake/external/boringssl.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ if(TARGET boringssl OR NOT DOWNLOAD_BORINGSSL)
1919
endif()
2020

2121
set(patch_file
22-
${CMAKE_CURRENT_LIST_DIR}/../../scripts/git/patches/boringssl/0001-disable-C4255-converting-empty-params-to-void.patch)
22+
${CMAKE_CURRENT_LIST_DIR}/../../scripts/git/patches/boringssl/0001-disable-warnings.patch)
2323

2424
set(boringssl_commit_tag 83da28a68f32023fd3b95a8ae94991a07b1f6c62)
2525

release_build_files/Android/firebase_dependencies.gradle

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,10 @@ import org.gradle.util.ConfigureUtil;
1717
// A map of library to the dependencies that need to be added for it.
1818
def firebaseDependenciesMap = [
1919
'app' : ['com.google.firebase:firebase-analytics:21.0.0'],
20+
'play_services' : ['com.google.android.gms:play-services-base:18.0.1'],
2021
'admob' : ['com.google.firebase:firebase-ads:19.8.0',
21-
'com.google.firebase:firebase-analytics:21.0.0',
22-
'com.google.android.gms:play-services-base:18.0.1'],
23-
'analytics' : ['com.google.firebase:firebase-analytics:21.0.0',
24-
'com.google.android.gms:play-services-base:18.0.1'],
22+
'com.google.firebase:firebase-analytics:21.0.0'],
23+
'analytics' : ['com.google.firebase:firebase-analytics:21.0.0'],
2524
'auth' : ['com.google.firebase:firebase-auth:21.0.3'],
2625
'database' : ['com.google.firebase:firebase-database:20.0.5'],
2726
'dynamic_links' : ['com.google.firebase:firebase-dynamic-links:21.0.1'],
@@ -30,18 +29,15 @@ def firebaseDependenciesMap = [
3029
'gma' : ['com.google.android.gms:play-services-ads:20.6.0',
3130
'com.google.firebase:firebase-analytics:21.0.0',
3231
'com.google.android.gms:play-services-base:18.0.1'],
33-
'installations' : ['com.google.firebase:firebase-installations:17.0.1',
34-
'com.google.android.gms:play-services-base:18.0.1'],
32+
'installations' : ['com.google.firebase:firebase-installations:17.0.1'],
3533
'invites' : ['com.google.firebase:firebase-invites:17.0.0'],
3634
// Messaging has an additional local dependency to include.
3735
'messaging' : ['com.google.firebase:firebase-messaging:23.0.4',
3836
'com.google.firebase.messaging.cpp:firebase_messaging_cpp@aar',
3937
'androidx.core:core:1.6.0-alpha03',
40-
'com.google.flatbuffers:flatbuffers-java:1.12.0',
41-
'com.google.android.gms:play-services-base:18.0.1'],
38+
'com.google.flatbuffers:flatbuffers-java:1.12.0'],
4239
'performance' : ['com.google.firebase:firebase-perf:20.0.6'],
43-
'remote_config' : ['com.google.firebase:firebase-config:21.1.0',
44-
'com.google.android.gms:play-services-base:18.0.1'],
40+
'remote_config' : ['com.google.firebase:firebase-config:21.1.0'],
4541
'storage' : ['com.google.firebase:firebase-storage:20.0.1'],
4642
'testlab' : []
4743
]
@@ -52,6 +48,10 @@ class Dependencies {
5248

5349
def getApp() {
5450
libSet.add('app')
51+
libSet.add('play_services')
52+
}
53+
def getAppWithoutPlayServices() {
54+
libSet.add('app')
5555
}
5656
def getAdmob() {
5757
libSet.add('admob')
@@ -127,6 +127,7 @@ project.afterEvaluate {
127127
// App is required, so add it if it wasn't included.
128128
if (!firebaseCpp.dependencies.libSet.contains('app')) {
129129
firebaseCpp.dependencies.libSet.add('app')
130+
firebaseCpp.dependencies.libSet.add('play_services')
130131
}
131132

132133
for (String lib : firebaseCpp.dependencies.libSet) {

release_build_files/readme.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,32 @@ Android SDK (20.x.x). Please ensure that you use firebase-ads version 19.8.0 in
166166
conjunction with the latest firebase-analytics version to maintain
167167
compatibility.
168168

169+
#### Gradle dependency file
170+
171+
Firebase C++ includes an `Android/firebase_dependencies.gradle` file
172+
that helps you include the correct Android dependencies and native C++
173+
libraries for each Firebase product. To use it, include the following
174+
in your build.gradle file (you can omit any Firebase products you
175+
aren't using):
176+
177+
```
178+
apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
179+
firebaseCpp.dependencies {
180+
app // Recommended for all apps using Firebase.
181+
admob
182+
analytics
183+
auth
184+
database
185+
dynamicLinks
186+
firestore
187+
functions
188+
installations
189+
messaging
190+
remoteConfig
191+
storage
192+
}
193+
```
194+
169195
### iOS Dependencies
170196

171197
iOS users can include either xcframeworks or static libraries depending upon their
@@ -577,6 +603,12 @@ workflow use only during the development of your app, not for publicly shipping
577603
code.
578604

579605
## Release Notes
606+
### Upcoming release
607+
- Changes
608+
- General (Android): Fixed a bug that required Android apps to include
609+
`com.google.android.gms:play-services-base` as an explicit dependency when
610+
only using AdMob, Analytics, Remote Config, or Messaging.
611+
580612
### 9.0.0
581613
- Changes
582614
- General (iOS): Firebase C++ on iOS is now built using Xcode 13.3.1.

remote_config/integration_test/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,10 @@ android {
7575
}
7676

7777
apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
78+
// Remote Config doesn't require play-services-base as a dependency, so include
79+
// the version of App without it, to ensure the C++ SDK also doesn't require it.
7880
firebaseCpp.dependencies {
81+
appWithoutPlayServices
7982
remoteConfig
8083
}
8184

Original file line numberDiff line numberDiff line change
@@ -1,25 +1,13 @@
1-
From 831806231dd360278dac2a37e3c3158420ad7bb3 Mon Sep 17 00:00:00 2001
2-
From: "google.com" <google.com>
3-
Date: Mon, 7 Jun 2021 13:57:27 -0400
4-
Subject: [PATCH] disable C4255 converting () to (void)
5-
6-
---
7-
src/CMakeLists.txt | 2 ++
8-
1 file changed, 2 insertions(+)
9-
10-
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
11-
index b7f468fe6..48f61bfd8 100644
121
--- a/src/CMakeLists.txt
132
+++ b/src/CMakeLists.txt
14-
@@ -193,6 +193,8 @@ elseif(MSVC)
3+
@@ -193,6 +193,10 @@ elseif(MSVC)
154
# possible loss of data
165
"C4244" # 'function' : conversion from 'int' to 'uint8_t',
176
# possible loss of data
187
+ "C4255" # 'function' : no function prototype given: converting '()' to
198
+ # '(void)'
9+
+ "C4191" # 'operator/operation' : unsafe conversion from 'type of
10+
+ # expression' to 'type required'
2011
"C4267" # conversion from 'size_t' to 'int', possible loss of data
2112
"C4371" # layout of class may have changed from a previous version of the
2213
# compiler due to better packing of member '...'
23-
--
24-
2.32.0.rc1.229.g3e70b5a671-goog
25-

0 commit comments

Comments
 (0)