Skip to content

Commit a148338

Browse files
authored
Preserve Android plugin CPU value in exports.json for ExportUnityPackage (#639)
* Preserve Android plugin CPU value in exports.json for ExportUnityPackage
1 parent 5b98ca0 commit a148338

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

source/ExportUnityPackage/export_unity_package.py

+52
Original file line numberDiff line numberDiff line change
@@ -1374,6 +1374,55 @@ def set_cpu_for_desktop_platforms(importer_metadata):
13741374
second["settings"] = settings
13751375
return importer_metadata
13761376

1377+
@staticmethod
1378+
def set_cpu_for_android(importer_metadata, cpu_string):
1379+
"""Sets the CPU for Android in the metadata if enabled.
1380+
1381+
Args:
1382+
importer_metadata: Metadata to modify.
1383+
cpu_string: The desired CPU string value.
1384+
1385+
Returns:
1386+
Modified importer_metadata.
1387+
"""
1388+
plugin_importer = safe_dict_get_value(
1389+
importer_metadata, "PluginImporter", default_value={})
1390+
serialized_version = safe_dict_get_value(
1391+
plugin_importer, "serializedVersion", default_value=1)
1392+
1393+
if serialized_version == 1:
1394+
platform_data = safe_dict_get_value(plugin_importer, "platformData",
1395+
default_value={})
1396+
for platform_name, options in platform_data.items():
1397+
if not safe_dict_get_value(options, "enabled", default_value=0):
1398+
continue
1399+
if not cpu_string:
1400+
continue
1401+
if platform_name == "Android":
1402+
settings = options.get("settings", collections.OrderedDict())
1403+
settings["CPU"] = cpu_string
1404+
options["settings"] = settings
1405+
else:
1406+
platform_data = safe_dict_get_value(plugin_importer, "platformData",
1407+
default_value=[])
1408+
for entry in platform_data:
1409+
# Parse the platform name tuple from the "first" dictionary.
1410+
first, second = Asset.platform_data_get_entry(entry)
1411+
platform_tuple = list(first.items())[0]
1412+
if len(platform_tuple) < 2:
1413+
continue
1414+
unused_platform_target, platform_name = platform_tuple
1415+
if not second.get("enabled", 0):
1416+
continue
1417+
if not cpu_string:
1418+
continue
1419+
settings = safe_dict_get_value(second, "settings",
1420+
default_value=collections.OrderedDict())
1421+
if platform_name == "Android":
1422+
settings["CPU"] = cpu_string
1423+
second["settings"] = settings
1424+
return importer_metadata
1425+
13771426
@staticmethod
13781427
def apply_any_platform_selection(importer_metadata):
13791428
"""Enable / disable all platforms if the "Any" platform is enabled.
@@ -1799,6 +1848,9 @@ def importer_metadata(self):
17991848
platform_data_options["enabled"] = 1
18001849
importer_metadata = Asset.set_cpu_for_desktop_platforms(
18011850
importer_metadata)
1851+
if "Android" in platforms and cpu_string != "AnyCPU":
1852+
importer_metadata = Asset.set_cpu_for_android(
1853+
importer_metadata, cpu_string)
18021854
else:
18031855
raise ProjectConfigurationError(
18041856
"Unknown importer type %s for package %s, paths %s" % (

source/ExportUnityPackage/export_unity_package_test.py

+46
Original file line numberDiff line numberDiff line change
@@ -1665,6 +1665,39 @@ def test_set_cpu_for_desktop_platforms_serializationv2(self):
16651665
export_unity_package.Asset.set_cpu_for_desktop_platforms(linux_enabled))
16661666
self.assertEqual(expected_metadata, linux_enabled_with_cpu)
16671667

1668+
def test_set_cpu_for_android_serializationv1(self):
1669+
"""Set CPU field for the enabled Android platform in v1 metadata format."""
1670+
android_enabled = copy.deepcopy(
1671+
export_unity_package.PLUGIN_IMPORTER_METADATA_TEMPLATE)
1672+
android_enabled["PluginImporter"]["platformData"]["Android"]["enabled"] = 1
1673+
expected_metadata = copy.deepcopy(android_enabled)
1674+
expected_metadata["PluginImporter"]["platformData"]["Android"]["settings"][
1675+
"CPU"] = "ARMv7"
1676+
android_enabled_with_cpu = (
1677+
export_unity_package.Asset.set_cpu_for_android(android_enabled, "ARMv7"))
1678+
self.assertEqual(expected_metadata, android_enabled_with_cpu)
1679+
1680+
def test_set_cpu_for_android_serializationv2(self):
1681+
"""Set CPU field for the enabled Android platform in v2 metadata format."""
1682+
android_enabled = collections.OrderedDict([
1683+
("PluginImporter", collections.OrderedDict([
1684+
("serializedVersion", 2),
1685+
("platformData", [
1686+
collections.OrderedDict([
1687+
("first", collections.OrderedDict([
1688+
("Android", "Android")])),
1689+
("second", collections.OrderedDict([
1690+
("enabled", 1)]))])
1691+
])
1692+
]))
1693+
])
1694+
expected_metadata = copy.deepcopy(android_enabled)
1695+
expected_metadata["PluginImporter"]["platformData"][0]["second"][
1696+
"settings"] = collections.OrderedDict([("CPU", "ARMv7")])
1697+
android_enabled_with_cpu = (
1698+
export_unity_package.Asset.set_cpu_for_android(android_enabled, "ARMv7"))
1699+
self.assertEqual(expected_metadata, android_enabled_with_cpu)
1700+
16681701
def test_apply_any_platform_selection_serializationv1(self):
16691702
"""Modify v1 importer metadata to enable all platforms."""
16701703
# Enable all platforms.
@@ -2044,6 +2077,19 @@ def test_importer_metadata_android_only(self):
20442077
self.package, {"importer": "PluginImporter",
20452078
"platforms": ["Android"]}).importer_metadata)
20462079

2080+
def test_importer_metadata_android_only_armv7(self):
2081+
"""Create metadata with ARMv7 CPU set."""
2082+
self.plugin_metadata["PluginImporter"]["platformData"]["Android"][
2083+
"enabled"] = 1
2084+
self.plugin_metadata["PluginImporter"]["platformData"]["Android"][
2085+
"settings"]["CPU"] = "ARMv7"
2086+
self.assertEqual(
2087+
self.plugin_metadata,
2088+
export_unity_package.AssetConfiguration(
2089+
self.package, {"importer": "PluginImporter",
2090+
"platforms": ["Android"],
2091+
"cpu": "ARMv7"}).importer_metadata)
2092+
20472093
def test_importer_metadata_ios_only(self):
20482094
"""Create metadata that only targets iOS."""
20492095
self.plugin_metadata["PluginImporter"]["platformData"]["iOS"]["enabled"] = 1

0 commit comments

Comments
 (0)