You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
4.4 KiB
Groovy
98 lines
4.4 KiB
Groovy
// Copyright (C) 2023 Google LLC
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import groovy.util.XmlSlurper
|
|
import groovy.xml.XmlUtil
|
|
|
|
import java.util.zip.ZipEntry
|
|
import java.util.zip.ZipOutputStream
|
|
|
|
configurations {
|
|
// Configuration used to resolve the artifacts of dependencies.
|
|
aarArtifacts.extendsFrom implementation
|
|
}
|
|
|
|
/**
|
|
* Validates the Unity GMA plugin dependencies.
|
|
* Add the following snippet to Assets/Plugins/Android/mainTemplate.gradle in the Unity Editor or
|
|
* unityLibrary/build.gradle in an Android project to use this script:
|
|
* <pre>{@code
|
|
* gradle.projectsEvaluated {
|
|
* apply from: 'GoogleMobileAdsPlugin.androidlib/validate_dependencies.gradle'
|
|
* }
|
|
* }</pre>
|
|
*/
|
|
task validateDependencies {
|
|
def expandedArchiveDirectory
|
|
// List of artifacts resolved from the aarArtifacts configuration.
|
|
project.configurations.aarArtifacts.
|
|
resolvedConfiguration.lenientConfiguration.
|
|
getArtifacts(Specs.satisfyAll()).findResults {
|
|
ResolvedArtifact artifact ->
|
|
File artifactTargetFile = new File(artifact.file.parent , artifact.file.name)
|
|
// Desired artifact - com.google.android.gms:play-services-ads-lite:22.4.0
|
|
// Group ID - com.google.android.gms
|
|
// Artifact ID - play-services-ads-lite
|
|
// Since Gradle has different naming convention for the same artifact in
|
|
// * modules-2 cache - play-services-ads-lite-22.4.0.aar
|
|
// * transforms-2 cache - com.google.android.gms.play-services-ads-lite-22.4.0
|
|
// we look for the common segment.
|
|
if (artifact.name.contains("play-services-ads-lite")) {
|
|
// Explode the archive to a temporary directory.
|
|
FileTree expandedArchive = project.zipTree(artifactTargetFile)
|
|
expandedArchive.forEach { File androidManifest ->
|
|
if (androidManifest.getName() == "AndroidManifest.xml") {
|
|
def xml = new XmlSlurper().parse(androidManifest)
|
|
def propertyNode = xml.depthFirst().find { it.name() == 'property' }
|
|
if (propertyNode) {
|
|
// Replace the <property> node with a comment.
|
|
propertyNode.replaceNode {
|
|
mkp.comment 'android.adservices.AD_SERVICES_CONFIG property'\
|
|
+ ' removed by GoogleMobileAds Unity plugin - Release notes: '\
|
|
+ 'https://github.com/googleads/googleads-mobile-unity/releases/'\
|
|
+ 'tag/v8.6.0'
|
|
}
|
|
}
|
|
def updatedXml = XmlUtil.serialize(xml)
|
|
androidManifest.setWritable(true)
|
|
androidManifest.text = updatedXml
|
|
expandedArchiveDirectory = androidManifest.parent
|
|
}
|
|
}
|
|
// Update the artifact archive.
|
|
artifactTargetFile.withOutputStream { outputStream ->
|
|
def zipStream = new ZipOutputStream(outputStream)
|
|
file(expandedArchiveDirectory).eachFileRecurse { file ->
|
|
if (file.isFile()) {
|
|
def entry = new ZipEntry(file.name)
|
|
zipStream.putNextEntry(entry)
|
|
file.withInputStream { zipStream << it }
|
|
zipStream.closeEntry()
|
|
}
|
|
}
|
|
zipStream.close()
|
|
}
|
|
}
|
|
}
|
|
// Clean up the temporary directory.
|
|
if (expandedArchiveDirectory) delete expandedArchiveDirectory
|
|
}
|
|
|
|
// Run the update task before unityLibrary project is built.
|
|
project(':unityLibrary:GoogleMobileAdsPlugin.androidlib') {
|
|
tasks.named('preBuild') {
|
|
dependsOn validateDependencies
|
|
}
|
|
}
|