Skip to content
This repository was archived by the owner on Oct 31, 2022. It is now read-only.

Commit 3908eff

Browse files
committed
Fix for projects with multiDexEnabled
* Fixed an infinite loop when multiDexEnabled is set to true in project. * Misc code clean up. * resolves #15
1 parent ac7477d commit 3908eff

File tree

2 files changed

+40
-26
lines changed

2 files changed

+40
-26
lines changed

src/main/groovy/com/onesignal/androidsdk/GradleProjectPlugin.groovy

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,14 @@ class GradleProjectPlugin implements Plugin<Project> {
8080
static def versionGroupAligns
8181
static Project project
8282
static def moduleVersionOverrides
83+
static def moduleCopied
8384

8485
@Override
8586
void apply(Project inProject) {
8687
project = inProject
8788
versionGroupAligns = InternalUtils.deepcopy(VERSION_GROUP_ALIGNS)
8889
moduleVersionOverrides = [:]
90+
moduleCopied = [:]
8991

9092
resolutionHooksForAndroidPluginV3()
9193
resolutionHooksForAndroidPluginV2()
@@ -99,7 +101,6 @@ class GradleProjectPlugin implements Plugin<Project> {
99101
return
100102

101103
def configuration = variant.compileConfiguration
102-
103104
doResolutionStrategyAndroidPluginV3(configuration)
104105
}
105106
}
@@ -108,10 +109,10 @@ class GradleProjectPlugin implements Plugin<Project> {
108109
static void resolutionHooksForAndroidPluginV2() {
109110
project.configurations.all { configuration ->
110111
project.afterEvaluate {
111-
if (!isAndroidPluginV3()) {
112-
generateHighestVersionsForGroups(configuration)
113-
doResolutionStrategyAndroidPluginV2(configuration)
114-
}
112+
if (isAndroidPluginV3())
113+
return
114+
generateHighestVersionsForGroups(configuration)
115+
doResolutionStrategyAndroidPluginV2(configuration)
115116
}
116117

117118
// Catches Android specific tasks, <buildType>CompileClasspath
@@ -165,7 +166,7 @@ class GradleProjectPlugin implements Plugin<Project> {
165166
targetSdkVersion = mergedFlavor.targetSdkVersion.apiLevel
166167
}
167168

168-
return targetSdkVersion
169+
targetSdkVersion
169170
}
170171

171172
static void doTargetSdkVersionAlign(DependencyResolveDetails details) {
@@ -238,7 +239,7 @@ class GradleProjectPlugin implements Plugin<Project> {
238239
project.logger.info("OneSignalProjectPlugin: ${msg}")
239240
}
240241

241-
static boolean inGroupAlignList(def details) {
242+
static boolean inGroupAlignList(details) {
242243
// Only override groups we define
243244
def versionOverride = versionGroupAligns[details.requested.group]
244245
if (!versionOverride)
@@ -248,16 +249,20 @@ class GradleProjectPlugin implements Plugin<Project> {
248249
def omitModules = versionOverride['omitModules']
249250
if (omitModules && omitModules.contains(details.requested.name))
250251
return false
251-
return true
252+
true
252253
}
253254

254255
static String getHighestVersion(String version1, String version2) {
255-
return compareVersions(version1, version2) > 0 ? version1 : version2
256+
compareVersions(version1, version2) > 0 ? version1 : version2
257+
}
258+
259+
static String moduleGroupAndName(details) {
260+
"${details.requested.group}:${details.requested.name}"
256261
}
257262

258263
static int compareVersions(String version1, String version2) {
259264
def versionComparator = new DefaultVersionComparator()
260-
return versionComparator.compare(new VersionInfo(version1), new VersionInfo(version2))
265+
versionComparator.compare(new VersionInfo(version1), new VersionInfo(version2))
261266
}
262267

263268
static Object finalAlignmentRules() {
@@ -268,7 +273,7 @@ class GradleProjectPlugin implements Plugin<Project> {
268273
updateMockVersionsIntoGradleVersions(finalVersionGroupAligns)
269274

270275
project.logger.debug("OneSignalProjectPlugin: FINAL ALIGN PART 2: ${finalVersionGroupAligns}")
271-
return finalVersionGroupAligns
276+
finalVersionGroupAligns
272277
}
273278

274279
static void alignAcrossGroups(def versionGroupAligns) {
@@ -298,14 +303,24 @@ class GradleProjectPlugin implements Plugin<Project> {
298303
// project.android.@plugin - This looks to be on the AppExtension class however this didn't work
299304
// Found 'enforceUniquePackageName' by comparing project.android.properties between versions
300305
static boolean isAndroidPluginV3() {
301-
return !project.android.hasProperty('enforceUniquePackageName')
306+
!project.android.hasProperty('enforceUniquePackageName')
307+
}
308+
309+
static void forceCanBeResolved(def configuration) {
310+
// canBeResolved not available on Gradle 2.14.1 and older
311+
if (configuration.hasProperty('canBeResolved'))
312+
configuration.canBeResolved = true
302313
}
303314

304315
static void generateHighestVersionsForGroups(def configuration) {
316+
// Prevent duplicate runs for the same configuration name
317+
// Fixes infinite calls when multiDexEnabled is set
318+
if (moduleCopied[configuration.name])
319+
return
320+
moduleCopied[configuration.name] = true
321+
305322
def configCopy = configuration.copy()
306-
// canBeResolved not available on Gradle 2.14.1 and older
307-
if (configCopy.hasProperty('canBeResolved'))
308-
configCopy.canBeResolved = true
323+
forceCanBeResolved(configCopy)
309324

310325
configCopy.resolutionStrategy.eachDependency { DependencyResolveDetails details ->
311326
doTargetSdkVersionAlign(details)
@@ -329,7 +344,7 @@ class GradleProjectPlugin implements Plugin<Project> {
329344
// Checking for configuration.name == 'compile' || 'implementation' skips to much however
330345
try {
331346
configuration.resolvedConfiguration.resolvedArtifacts
332-
} catch (def e) {}
347+
} catch (any) {}
333348
}
334349

335350
static String getVersionFromDependencyResolveDetails(DependencyResolveDetails details) {
@@ -347,8 +362,6 @@ class GradleProjectPlugin implements Plugin<Project> {
347362
return '9999.9999.9999'
348363
else
349364
project.logger.error("OneSignalProjectPlugin: Unkown VersionSelector: ${parsedVersion}")
350-
351-
return null
352365
}
353366

354367
static final int MAJOR_INDEX = 0
@@ -381,6 +394,6 @@ class GradleProjectPlugin implements Plugin<Project> {
381394
parts[MINOR_INDEX] = minorVersion.toString()
382395
}
383396

384-
return parts.join('.')
397+
parts.join('.')
385398
}
386399
}

src/test/groovy/com/onesignal/androidsdk/MainTest.groovy

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ class MainTest extends Specification {
9191
targetSdkVersion ${buildSections['targetSdkVersion']}
9292
versionCode 1
9393
versionName "1.0"
94+
multiDexEnabled true
9495
}
9596
9697
buildTypes {
@@ -204,7 +205,7 @@ class MainTest extends Specification {
204205
then:
205206
assert results // Asserting existence and contains 1+ entries
206207
results.each {
207-
assert it.value.contains('\\--- com.onesignal:OneSignal:3.5.+ -> 3.6.3')
208+
assert it.value.contains('--- com.onesignal:OneSignal:3.5.+ -> 3.6.3')
208209
assert it.value.contains(' +--- com.google.android.gms:play-services-gcm:[10.2.1,11.3.0) -> 11.2.2')
209210
}
210211
}
@@ -233,7 +234,7 @@ class MainTest extends Specification {
233234

234235
then:
235236
results.each {
236-
assert it.value.contains('\\--- com.android.support:support-v4:26.0.0 -> 25.4.0')
237+
assert it.value.contains('--- com.android.support:support-v4:26.0.0 -> 25.4.0')
237238
}
238239
}
239240

@@ -251,7 +252,7 @@ class MainTest extends Specification {
251252
results.each {
252253
assert it.value.contains('+--- com.google.firebase:firebase-core:11.0.0 -> 11.4.0')
253254
assert it.value.contains('+--- com.google.android.gms:play-services-gcm:11.2.0 -> 11.4.0')
254-
assert it.value.contains('\\--- com.google.android.gms:play-services-location:11.4.0')
255+
assert it.value.contains('--- com.google.android.gms:play-services-location:11.4.0')
255256
}
256257
}
257258

@@ -282,7 +283,7 @@ class MainTest extends Specification {
282283
then:
283284
results.each {
284285
assert it.value.contains('+--- com.android.support:appcompat-v7:25.0.+ -> 25.4.0')
285-
assert it.value.contains('\\--- com.android.support:support-v4:25.+ -> 25.4.0 (*)')
286+
assert it.value.contains('--- com.android.support:support-v4:25.+ -> 25.4.0 (*)')
286287
}
287288
}
288289

@@ -298,7 +299,7 @@ class MainTest extends Specification {
298299
then:
299300
results.each {
300301
assert it.value.contains('+--- com.android.support:appcompat-v7:[25.0.0, 26.0.0) -> 26.0.0-beta2')
301-
assert it.value.contains('\\--- com.android.support:support-v4:25.+ -> 26.0.0-beta2 (*)')
302+
assert it.value.contains('--- com.android.support:support-v4:25.+ -> 26.0.0-beta2 (*)')
302303
}
303304
}
304305

@@ -386,8 +387,8 @@ class MainTest extends Specification {
386387
assert it.value.contains('+--- com.google.android.gms:play-services-gcm:[10.2.1,11.3.0) -> 11.2.2')
387388
assert it.value.contains('+--- com.google.android.gms:play-services-location:[10.2.1,11.3.0) -> 11.2.2')
388389
assert it.value.contains('+--- com.android.support:support-v4:[26.0.0,26.2.0) -> 26.1.0 (*)')
389-
assert it.value.contains('\\--- com.android.support:appcompat-v7:25.0.0 -> 26.1.0')
390-
assert it.value.contains('\\--- com.android.support:customtabs:[26.0.0,26.2.0) -> 26.1.0')
390+
assert it.value.contains('--- com.android.support:appcompat-v7:25.0.0 -> 26.1.0')
391+
assert it.value.contains('--- com.android.support:customtabs:[26.0.0,26.2.0) -> 26.1.0')
391392
}
392393
}
393394
}

0 commit comments

Comments
 (0)