1
+ // Copyright 2018 Google LLC
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ // A map of library to the dependencies that need to be added for it.
16
+ def firebaseDependenciesMap = [
17
+ ' app' : [' com.google.firebase:firebase-core:16.0.7' ],
18
+ ' admob' : [' com.google.firebase:firebase-ads:17.1.3' ],
19
+ ' analytics' : [' com.google.firebase:firebase-analytics:16.3.0' ],
20
+ ' auth' : [' com.google.firebase:firebase-auth:16.2.0' ],
21
+ ' database' : [' com.google.firebase:firebase-database:16.1.0' ],
22
+ ' dynamic_links' : [' com.google.firebase:firebase-invites:16.1.0' ],
23
+ ' functions' : [' com.google.firebase:firebase-functions:16.2.0' ],
24
+ ' instance_id' : [' com.google.firebase:firebase-iid:17.1.0' ],
25
+ ' invites' : [' com.google.firebase:firebase-invites:16.1.0' ],
26
+ // Messaging has an additional local dependency to include.
27
+ ' messaging' : [' com.google.firebase:firebase-messaging:17.4.0' ,
28
+ ' firebase_cpp_sdk.messaging:messaging_java' ],
29
+ ' performance' : [' com.google.firebase:firebase-perf:16.2.4' ],
30
+ ' remote_config' : [' com.google.firebase:firebase-config:16.4.0' ],
31
+ ' storage' : [' com.google.firebase:firebase-storage:16.1.0' ]
32
+ ]
33
+
34
+ // A map of library to the gradle resources that they depend upon.
35
+ def firebaseResourceDependenciesMap = [
36
+ ' app' : [' :app:app_resources' ,
37
+ ' :app:google_api_resources' ,
38
+ ' :app:invites_resources' ],
39
+ ' admob' : [' :admob:admob_resources' ],
40
+ ' auth' : [' :auth:auth_resources' ],
41
+ ' database' : [' :database:database_resources' ],
42
+ ' storage' : [' :storage:storage_resources' ]
43
+ ]
44
+
45
+ def setResourceDependencies (String subproject ) {
46
+ preDebugBuild. dependsOn gradle. includedBuild(' firebase_cpp_sdk' ). task(
47
+ " $subproject :generateDexJarDebug" )
48
+ preDebugBuild. dependsOn gradle. includedBuild(' firebase_cpp_sdk' ). task(
49
+ " $subproject :generateDexJarRelease" )
50
+ }
51
+
52
+ // Handles adding the Firebase C++ dependencies as properties.
53
+ class Dependencies {
54
+ HashSet<String > libSet = new HashSet<String > ()
55
+
56
+ def getApp () {
57
+ libSet. add(' app' )
58
+ }
59
+ def getAdmob () {
60
+ libSet. add(' admob' )
61
+ }
62
+ def getAnalytics () {
63
+ libSet. add(' analytics' )
64
+ }
65
+ def getAuth () {
66
+ libSet. add(' auth' )
67
+ }
68
+ def getDatabase () {
69
+ libSet. add(' database' )
70
+ }
71
+ def getDynamicLinks () {
72
+ libSet. add(' dynamic_links' )
73
+ }
74
+ def getFunctions () {
75
+ libSet. add(' functions' )
76
+ }
77
+ def getInstanceId () {
78
+ libSet. add(' instance_id' )
79
+ }
80
+ def getInvites () {
81
+ libSet. add(' invites' )
82
+ }
83
+ def getMessaging () {
84
+ libSet. add(' messaging' )
85
+ }
86
+ def getPerformance () {
87
+ libSet. add(' performance' )
88
+ }
89
+ def getRemoteConfig () {
90
+ libSet. add(' remote_config' )
91
+ }
92
+ def getStorage () {
93
+ libSet. add(' storage' )
94
+ }
95
+ }
96
+
97
+ // Extension to handle which Firebase C++ dependencies are being added to the
98
+ // gradle project.
99
+ // They are added via: firebaseCpp.dependencies "admob", "analytics", ...
100
+ class FirebaseCppExtension {
101
+ Dependencies dependencies = new Dependencies ()
102
+
103
+ void dependencies (Closure c ) {
104
+ ConfigureUtil . configure(c, dependencies)
105
+ }
106
+ void dependencies (Action<? super Dependencies > action ) {
107
+ action. execute(dependencies)
108
+ }
109
+ }
110
+
111
+ project. extensions. create(' firebaseCpp' , FirebaseCppExtension )
112
+
113
+ apply from : " ${ gradle.firebase_cpp_sdk_dir} /android_build_files/generate_proguard.gradle"
114
+
115
+ def generateAndAddProguard (String lib ) {
116
+ // Set the property on the project, so it is easier to use
117
+ project. ext. firebase_cpp_sdk_dir = " ${ gradle.firebase_cpp_sdk_dir} "
118
+
119
+ // Generate the proguard file for the library, and add it to the project
120
+ generateProguardFileWithCallback(lib, new Action<File > () {
121
+ public void execute (File proguardFile ) {
122
+ project. android. buildTypes. debug. proguardFile proguardFile
123
+ project. android. buildTypes. release. proguardFile proguardFile
124
+ }
125
+ })
126
+ }
127
+
128
+ project. afterEvaluate {
129
+ if (! firebaseCpp. dependencies. libSet. isEmpty()) {
130
+ // App is required, so add it if it wasn't included.
131
+ if (! firebaseCpp. dependencies. libSet. contains(' app' )) {
132
+ firebaseCpp. dependencies. libSet. add(' app' )
133
+ }
134
+
135
+ for (String lib : firebaseCpp. dependencies. libSet) {
136
+ // Generate and include the proguard file
137
+ generateAndAddProguard(lib)
138
+
139
+ // Add the dependencies for the library
140
+ for (String dep : firebaseDependenciesMap. get(lib)) {
141
+ project. dependencies {
142
+ implementation " $dep "
143
+ }
144
+ }
145
+ if (firebaseResourceDependenciesMap. containsKey(lib)) {
146
+ for (String resDep : firebaseResourceDependenciesMap. get(lib)) {
147
+ setResourceDependencies(resDep)
148
+ }
149
+ }
150
+ }
151
+ }
152
+ }
0 commit comments