Skip to content

Commit df6fb56

Browse files
committed
Supporting gradle properties in android integration tests.
From Unity 2019.3, the right way to enable jetifier and androidx is to use gradle template properties file. This meant that our integration tests running resolve with gradle and jetifier were failing on newer versions of Unity. Bug: 177943798 Change-Id: Iae9a6001fae4f1b61c9e0ce58be067560a980fd1
1 parent 46c8ff9 commit df6fb56

File tree

5 files changed

+233
-10
lines changed

5 files changed

+233
-10
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M
2+
org.gradle.parallel=true
3+
**ADDITIONAL_PROPERTIES**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M
2+
org.gradle.parallel=true
3+
# Android Resolver Properties Start
4+
android.useAndroidX=true
5+
android.enableJetifier=true
6+
# Android Resolver Properties End
7+
**ADDITIONAL_PROPERTIES**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
2+
3+
buildscript {
4+
repositories {
5+
jcenter()
6+
google()
7+
}
8+
9+
dependencies {
10+
classpath 'com.android.tools.build:gradle:3.0.1'
11+
}
12+
}
13+
14+
allprojects {
15+
repositories {
16+
flatDir {
17+
dirs 'libs'
18+
}
19+
}
20+
}
21+
22+
// Android Resolver Repos Start
23+
([rootProject] + (rootProject.subprojects as List)).each { project ->
24+
project.repositories {
25+
def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/")
26+
maven {
27+
url "https://maven.google.com"
28+
}
29+
maven {
30+
url "file:///my/nonexistant/test/repo" // Assets/ExternalDependencyManager/Editor/TestDependencies.xml:17
31+
}
32+
maven {
33+
url (unityProjectPath + "/project_relative_path/repo") // Assets/ExternalDependencyManager/Editor/TestDependencies.xml:17
34+
}
35+
maven {
36+
url (unityProjectPath + "/Assets/GeneratedLocalRepo/Firebase/m2repository") // Assets/ExternalDependencyManager/Editor/TestDependencies.xml:10
37+
}
38+
mavenLocal()
39+
jcenter()
40+
mavenCentral()
41+
}
42+
}
43+
// Android Resolver Repos End
44+
apply plugin: 'com.android.application'
45+
46+
dependencies {
47+
implementation fileTree(dir: 'libs', include: ['*.jar'])
48+
// Android Resolver Dependencies Start
49+
compile 'com.android.support:support-annotations:26.1.0' // Assets/ExternalDependencyManager/Editor/TestDependencies.xml:4
50+
compile 'com.google.firebase:firebase-app-unity:5.1.1' // Assets/ExternalDependencyManager/Editor/TestDependencies.xml:10
51+
compile 'com.google.firebase:firebase-common:16.0.0' // Google.AndroidResolverIntegrationTests.SetupDependencies
52+
compile 'org.test.psr:classifier:1.0.1:foo@aar' // Assets/ExternalDependencyManager/Editor/TestDependencies.xml:12
53+
// Android Resolver Dependencies End
54+
**DEPS**}
55+
56+
// Android Resolver Exclusions Start
57+
android {
58+
packagingOptions {
59+
exclude ('lib/unsupported/libFirebaseCppApp-5.1.1.so')
60+
}
61+
}
62+
// Android Resolver Exclusions End
63+
android {
64+
compileSdkVersion **APIVERSION**
65+
buildToolsVersion '**BUILDTOOLS**'
66+
67+
defaultConfig {
68+
minSdkVersion **MINSDKVERSION**
69+
targetSdkVersion **TARGETSDKVERSION**
70+
applicationId '**APPLICATIONID**'
71+
ndk {
72+
abiFilters **ABIFILTERS**
73+
}
74+
versionCode **VERSIONCODE**
75+
versionName '**VERSIONNAME**'
76+
}
77+
78+
lintOptions {
79+
abortOnError false
80+
}
81+
82+
aaptOptions {
83+
noCompress '.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**
84+
}**SIGN**
85+
86+
buildTypes {
87+
debug {
88+
minifyEnabled **MINIFY_DEBUG**
89+
useProguard **PROGUARD_DEBUG**
90+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD**
91+
jniDebuggable true
92+
}
93+
release {
94+
minifyEnabled **MINIFY_RELEASE**
95+
useProguard **PROGUARD_RELEASE**
96+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD****SIGNCONFIG**
97+
}
98+
}**PACKAGING_OPTIONS****SPLITS**
99+
**BUILT_APK_LOCATION**
100+
}**SPLITS_VERSION_CODE****SOURCE_BUILD_SETUP**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
2+
3+
buildscript {
4+
repositories {
5+
jcenter()
6+
google()
7+
}
8+
9+
dependencies {
10+
classpath 'com.android.tools.build:gradle:3.0.1'
11+
}
12+
}
13+
14+
allprojects {
15+
repositories {
16+
flatDir {
17+
dirs 'libs'
18+
}
19+
}
20+
}
21+
22+
apply plugin: 'com.android.application'
23+
24+
dependencies {
25+
implementation fileTree(dir: 'libs', include: ['*.jar'])
26+
**DEPS**}
27+
28+
android {
29+
compileSdkVersion **APIVERSION**
30+
buildToolsVersion '**BUILDTOOLS**'
31+
32+
defaultConfig {
33+
minSdkVersion **MINSDKVERSION**
34+
targetSdkVersion **TARGETSDKVERSION**
35+
applicationId '**APPLICATIONID**'
36+
ndk {
37+
abiFilters **ABIFILTERS**
38+
}
39+
versionCode **VERSIONCODE**
40+
versionName '**VERSIONNAME**'
41+
}
42+
43+
lintOptions {
44+
abortOnError false
45+
}
46+
47+
aaptOptions {
48+
noCompress '.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**
49+
}**SIGN**
50+
51+
buildTypes {
52+
debug {
53+
minifyEnabled **MINIFY_DEBUG**
54+
useProguard **PROGUARD_DEBUG**
55+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD**
56+
jniDebuggable true
57+
}
58+
release {
59+
minifyEnabled **MINIFY_RELEASE**
60+
useProguard **PROGUARD_RELEASE**
61+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD****SIGNCONFIG**
62+
}
63+
}**PACKAGING_OPTIONS****SPLITS**
64+
**BUILT_APK_LOCATION**
65+
}**SPLITS_VERSION_CODE****SOURCE_BUILD_SETUP**

source/AndroidResolver/test/src/AndroidResolverIntegrationTests.cs

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,24 @@ public class AndroidResolverIntegrationTests {
5656
private const string GRADLE_TEMPLATE_LIBRARY_DISABLED =
5757
"Assets/Plugins/Android/mainTemplateLibraryDISABLED.gradle";
5858

59+
/// <summary>
60+
/// Disabled Gradle properties template file.
61+
/// </summary>
62+
private const string GRADLE_TEMPLATE_PROPERTIES_DISABLED =
63+
"Assets/Plugins/Android/gradleTemplateDISABLED.properties";
64+
65+
/// <summary>
5966
/// <summary>
6067
/// Enabled Gradle template file.
6168
/// </summary>
6269
private const string GRADLE_TEMPLATE_ENABLED = "Assets/Plugins/Android/mainTemplate.gradle";
6370

71+
/// <summary>
72+
/// <summary>
73+
/// Enabled Gradle template properties file.
74+
/// </summary>
75+
private const string GRADLE_TEMPLATE_PROPERTIES_ENABLED = "Assets/Plugins/Android/gradleTemplate.properties";
76+
6477
/// <summary>
6578
/// Configure tests to run.
6679
/// </summary>
@@ -75,7 +88,8 @@ public static void ConfigureTestCases() {
7588
// that do not use the Gradle template.
7689
var nonGradleTemplateFilesToIgnore = new HashSet<string>() {
7790
Path.GetFileName(GRADLE_TEMPLATE_DISABLED),
78-
Path.GetFileName(GRADLE_TEMPLATE_LIBRARY_DISABLED)
91+
Path.GetFileName(GRADLE_TEMPLATE_LIBRARY_DISABLED),
92+
Path.GetFileName(GRADLE_TEMPLATE_PROPERTIES_DISABLED)
7993
};
8094

8195
UnityEngine.Debug.Log("Setting up test cases for execution.");
@@ -110,7 +124,8 @@ public static void ConfigureTestCases() {
110124
"Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/" +
111125
"firebase/firebase-app-unity/5.1.1/firebase-app-unity-5.1.1.aar" },
112126
filesToIgnore: new HashSet<string> {
113-
Path.GetFileName(GRADLE_TEMPLATE_LIBRARY_DISABLED)
127+
Path.GetFileName(GRADLE_TEMPLATE_LIBRARY_DISABLED),
128+
Path.GetFileName(GRADLE_TEMPLATE_PROPERTIES_DISABLED)
114129
});
115130
}
116131
},
@@ -120,17 +135,28 @@ public static void ConfigureTestCases() {
120135
ClearAllDependencies();
121136
SetupDependencies();
122137
GooglePlayServices.SettingsDialog.UseJetifier = true;
138+
var expectedAssetsDir = "ExpectedArtifacts/NoExport/GradleTemplateJetifier";
139+
string gradleTemplateProperties = null;
140+
// For Unity >= 2019.3f, Jetifier is enabled for the build
141+
// via gradle properties.
142+
if (GradleTemplatePropertiesSupported) {
143+
expectedAssetsDir = "ExpectedArtifacts/NoExport/GradleTemplatePropertiesJetifier";
144+
gradleTemplateProperties = GRADLE_TEMPLATE_PROPERTIES_DISABLED;
145+
}
123146

124147
ResolveWithGradleTemplate(
125148
GRADLE_TEMPLATE_DISABLED,
126-
"ExpectedArtifacts/NoExport/GradleTemplateJetifier",
149+
expectedAssetsDir,
127150
testCase, testCaseComplete,
128151
otherExpectedFiles: new [] {
129152
"Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/" +
130153
"firebase/firebase-app-unity/5.1.1/firebase-app-unity-5.1.1.aar" },
131154
filesToIgnore: new HashSet<string> {
132-
Path.GetFileName(GRADLE_TEMPLATE_LIBRARY_DISABLED)
133-
});
155+
Path.GetFileName(GRADLE_TEMPLATE_LIBRARY_DISABLED),
156+
Path.GetFileName(GRADLE_TEMPLATE_PROPERTIES_DISABLED)},
157+
deleteGradleTemplateProperties: true,
158+
gradleTemplateProperties: gradleTemplateProperties
159+
);
134160
}
135161
},
136162
new IntegrationTester.TestCase {
@@ -147,7 +173,8 @@ public static void ConfigureTestCases() {
147173
"Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/" +
148174
"firebase/firebase-app-unity/5.1.1/firebase-app-unity-5.1.1.aar" },
149175
filesToIgnore: new HashSet<string> {
150-
Path.GetFileName(GRADLE_TEMPLATE_DISABLED)
176+
Path.GetFileName(GRADLE_TEMPLATE_DISABLED),
177+
Path.GetFileName(GRADLE_TEMPLATE_PROPERTIES_DISABLED)
151178
});
152179
}
153180
},
@@ -180,7 +207,8 @@ public static void ConfigureTestCases() {
180207
testCaseComplete(testCaseResult);
181208
},
182209
filesToIgnore: new HashSet<string> {
183-
Path.GetFileName(GRADLE_TEMPLATE_LIBRARY_DISABLED)
210+
Path.GetFileName(GRADLE_TEMPLATE_LIBRARY_DISABLED),
211+
Path.GetFileName(GRADLE_TEMPLATE_PROPERTIES_DISABLED),
184212
});
185213
} finally {
186214
enableDependencies();
@@ -267,7 +295,8 @@ public static void ConfigureTestCases() {
267295
ClearAllDependencies();
268296
SetupDependencies();
269297
var filesToIgnore = new HashSet<string> {
270-
Path.GetFileName(GRADLE_TEMPLATE_LIBRARY_DISABLED)
298+
Path.GetFileName(GRADLE_TEMPLATE_LIBRARY_DISABLED),
299+
Path.GetFileName(GRADLE_TEMPLATE_PROPERTIES_DISABLED)
271300
};
272301

273302
ResolveWithGradleTemplate(
@@ -349,6 +378,13 @@ public static void ConfigureTestCases() {
349378
}
350379
}
351380

381+
/// <summary>
382+
/// Whether Gradle Template properties are supported by the current version of Unity.
383+
/// </summary>
384+
private static bool GradleTemplatePropertiesSupported {
385+
get { return IntegrationTester.Runner.UnityVersion >= 2019.3f; }
386+
}
387+
352388
/// <summary>
353389
/// Whether the Gradle builds are supported by the current version of Unity.
354390
/// </summary>
@@ -435,6 +471,7 @@ private static void ValidateAndroidTargetSelected(
435471
private static void ClearAllDependencies() {
436472
UnityEngine.Debug.Log("Clear all loaded dependencies");
437473
GooglePlayServices.SettingsDialog.UseJetifier = false;
474+
GooglePlayServices.SettingsDialog.PatchPropertiesTemplateGradle = false;
438475

439476
PlayServicesSupport.ResetDependencies();
440477
UpdateAdditionalDependenciesFile(false);
@@ -641,26 +678,37 @@ private static void Resolve(string androidBuildSystem, bool exportProject,
641678
/// <param name="deleteGradleTemplate">Whether to delete the gradle template before
642679
/// testCaseComplete is called.</param>
643680
/// <param name="filesToIgnore">Set of files to relative to the generatedAssetsDir.</param>
681+
/// <param name="gradleTemplateProperties">Gradle template properties to use.</param>
682+
/// <param name="deleteGradleTemplateProperties">Whether to delete the gradle template
683+
/// properties before testCaseComplete is called.</param>
644684
private static void ResolveWithGradleTemplate(
645685
string gradleTemplate,
646686
string expectedAssetsDir,
647687
IntegrationTester.TestCase testCase,
648688
Action<IntegrationTester.TestCaseResult> testCaseComplete,
649689
IEnumerable<string> otherExpectedFiles = null,
690+
bool deleteGradleTemplateProperties = false,
691+
ICollection<string> filesToIgnore = null,
650692
bool deleteGradleTemplate = true,
651-
ICollection<string> filesToIgnore = null) {
693+
string gradleTemplateProperties = null) {
652694
var cleanUpFiles = new List<string>();
653695
if (deleteGradleTemplate) cleanUpFiles.Add(GRADLE_TEMPLATE_ENABLED);
696+
if (deleteGradleTemplateProperties) cleanUpFiles.Add(GRADLE_TEMPLATE_PROPERTIES_ENABLED);
654697
if (otherExpectedFiles != null) cleanUpFiles.AddRange(otherExpectedFiles);
655698
Action cleanUpTestCase = () => {
656699
GooglePlayServices.SettingsDialog.PatchMainTemplateGradle = false;
700+
GooglePlayServices.SettingsDialog.PatchPropertiesTemplateGradle = false;
657701
foreach (var filename in cleanUpFiles) {
658702
if (File.Exists(filename)) File.Delete(filename);
659703
}
660704
};
661705
try {
662706
GooglePlayServices.SettingsDialog.PatchMainTemplateGradle = true;
663707
File.Copy(gradleTemplate, GRADLE_TEMPLATE_ENABLED);
708+
if (gradleTemplateProperties != null) {
709+
GooglePlayServices.SettingsDialog.PatchPropertiesTemplateGradle = true;
710+
File.Copy(gradleTemplateProperties, GRADLE_TEMPLATE_PROPERTIES_ENABLED);
711+
}
664712
Resolve("Gradle", false, expectedAssetsDir, null, filesToIgnore, testCase,
665713
(IntegrationTester.TestCaseResult testCaseResult) => {
666714
if (otherExpectedFiles != null) {
@@ -818,7 +866,7 @@ private static List<string> CompareDirectoryContents(string expectedAssetsDir,
818866
string expectedContentsAsString = "(binary)";
819867
string resolvedContentsAsString = expectedContentsAsString;
820868
string resolvedExtension = Path.GetExtension(resolvedFile).ToLower();
821-
foreach (var extension in new[] { ".xml", ".txt", ".gradle" }) {
869+
foreach (var extension in new[] { ".xml", ".txt", ".gradle", ".properties" }) {
822870
if (resolvedExtension == extension) {
823871
displayContents = true;
824872
break;

0 commit comments

Comments
 (0)