本指南概述了 Solar2D 应用的各种高级构建选项。
本指南适用于需要更专业的配置选项和自定义应用设置的用户。如果您正在寻找通用/基本构建设置和选项,请参阅项目构建设置指南。
如果您希望将 iOS 应用限制在具有特定功能的设备上,可以在iphone → plistUIRequiredDeviceCapabilities 键。此键的值应该是一个包含与 Apple 文档匹配的特定键的表。例如:
settings =
{
    iphone =
    {
        plist =
        {
            UIRequiredDeviceCapabilities =
            {
                ["gyroscope"] = true,
            },
        },
    },
}
在 UIRequiredDeviceCapabilities 表中包含特定键时,其值应为布尔值,逻辑如下:
true — 设备必须具备关联功能才能运行应用。false — 设备不得具备关联功能才能运行应用。仅当您绝对必须限制应用的目标设备时,才应包含特定键 — 如果设备是否支持某种功能无关紧要,请省略其键。
省略键的值将产生与将其设置为 true 相同的结果。例如,以下两者等效:
UIRequiredDeviceCapabilities = { "gyroscope" }
UIRequiredDeviceCapabilities = { ["gyroscope"] = true }
如果您需要在构建时绕过 PNG 文件处理 (pngcrush),可以包含值为 true 的 skipPNGCrush 键。此键应在 plist 表之外但在 iphone 表之内指定。
settings =
{
    iphone =
    {
        plist =
        {
        },
        skipPNGCrush = true,
    },
}
如果您想在 xassets 项目中包含备用图标,请使用 alternateIcons 并包含图标名称数组。仅在 Solar2D Sim 2023.3692+ 中可用。
settings =
{
    iphone =
    {
        plist =
        {
        },
        xcassets = "Images.xcassets",
        alternateIcons = {"Icon1", "Icon2"},
    },
}
使用 minSdkVersion 键值提供最低 SDK 版本允许您将应用排除在安装在具有较旧版本 Android 操作系统的设备上。它对应于此处详细介绍的 minSdkVersion 项。此设置对用户不可见。
settings =
{
    android =
    {
        minSdkVersion = "16",
    },
}
最低 SDK 版本必须指定为整数 — 它不能包含任何小数点。
对于 Android 4.0.3(Solar2D 支持的最旧版本),Solar2D 仅允许最低值为 "15"。有关各种 Android SDK 版本和 API 级别的详细信息,请参阅此处。
如果未另行指定,则最低 SDK 版本默认为 "15"。
如果您要将应用部署到 Android TV,则应包含值为 true 的 supportsTV 键。这将使 Android TV 设备可以通过 Google Play 购买该应用。
此外,您可以将 isGame 键设置为 true  将应用归类到 Google Play 的游戏部分。如果省略此键或将其设置为 false,则该应用将归类到应用部分。
settings =
{
    android =
    {
        supportsTV = true,
        isGame = true,
    },
}
可选的 supportsScreens 表指定/限制 Android 应用支持的屏幕。有关详细说明和更多选项,请参阅 Android 文档。
settings =
{
    android =
    {
        supportsScreens =
        {
            smallScreens  = true,
            normalScreens = true,
            largeScreens  = true,
            xlargeScreens = false,
            requiresSmallestWidthDp = 320,
        },
    },
}
默认情况下,其他应用被授予content:// URL 访问您的应用文件的权限。这是将应用文件附加到build.settings 文件中设置以下内容:
settings =
{
    android =
    {
        allowAppsReadOnlyAccessToFiles = false,
    },
}
您无法阻止已获得 root 权限的 Android 设备上的文件访问。这适用于所有 Android 应用,包括未用 Solar2D 构建的应用。因此,如果您的应用文件包含任何敏感信息,建议您自行加密这些信息。
您可以通过添加值为 `true` 的 `largeHeap` 键来请求 Android 操作系统为您的应用提供更多 Java 堆内存。例如,它可能会将特定设备上的最大堆大小从 32 MB 提高到 256 MB。如果您的应用在
settings =
{
    android =
    {
        largeHeap = true,
    },
}
本节详细介绍了可用于
以下专用指令可用于
settings =
{
    android =
    {
        strings =
        {
            permdesc = "Custom permission description",
            permlabel = "custom-permission-Label",
        },
    },
}
settings =
{
    android =
    {
        permissions =
        {
            {
                name = ".PERMISSION1",
                description = "@string/permdesc",
                icon = "@mipmap/icon",
                label = "@string/permlabel",
                permissionGroup = "android.permission-group.COST_MONEY",
                protectionLevel = "normal",
            },
        },
    },
}
settings =
{
    android =
    {
        manifestChildElements =
        {
            -- Array of strings
            [[
            <uses-configuration android:reqFiveWayNav="true" />
            ]],
        },
    },
}
settings =
{
    android =
    {
        applicationChildElements =
        {
            -- Array of strings
            [[
            <activity android:name="com.example.MyActivity"
                android:configChanges="keyboard|keyboardHidden"/>
            ]],
        },
    },
}
`google-play-services.json`settings =
{
    android =
    {
        apkFiles =
        {
            "google-play-services.json",
            "res/raw/mypage.html",
        },
    },
}
Solar2D 将以下属性用于自身目的,并且不能覆盖它们
| 属性 | |
|---|---|
| android:configChanges | |
| android:label | |
| android:launchMode | |
| android:name | |
| android:screenOrientation | |
| android:theme | 
settings =
{
    android =
    {
        coronaActivityFlags =
        {
            resizeableActivity = true,
            persistableMode = "persistRootOnly",
        },
    },
}
如有必要,您可以微调插件以仅在特定平台上受支持。这是通过包含一个 `supportedPlatforms` 表来完成的,其中包含
["plugin.gpgs"] =
{
    publisherId = "com.coronalabs",
    supportedPlatforms = { android=true },
},
在此表中,允许使用以下键
| 键 | 平台 | 
|---|---|
| iphone | 所有 iOS 设备 | 
| android | 所有 Android 设备 | 
| appletvos | Apple TV | 
| macos | macOS 桌面 | 
| win32 | Windows 桌面 | 
| ["android-kindle"] | Amazon Kindle | 
| ["iphone-sim"] | Xcode iOS 模拟器 | 
省略 `supportedPlatforms` 表实际上会在其本身支持的所有平台上包含该插件。
您可以将版本设置为与Solar2D 免费插件目录上插件版本的 GitHub 标签名称相同。例如,此处提供可用版本的插件。请注意,这需要 Solar2D 3676+。
plugins = {
     ["com.coronalabs-CoronaProvider.native.popup.activity"] = {
                publisherId = "com.coronalabs",
                version = "v3",
     },
},
通常,应用程序的分发版本(用于应用商店的版本)会从编译代码中删除 Lua 调试信息,而开发版本则不会删除。通常,对于分发版本,最好删除调试符号,因为它可以减小应用程序大小并提供少量性能提升,但这完全取决于应用程序的类型以及您希望如何进行错误报告。
在 iOS 中,分发版本是通过使用名称包含 **iPhone 分发:** 的配置文件来生成的,而在 Android 中,它们是通过使用除 **Debug** 之外的任何名称的密钥库来生成的。
有时,在应用程序的分发版本中提供调试符号可能很有用。这意味着您可以在堆栈跟踪和运行时错误消息中获得更多详细信息。根据您的需要,可以使用 `neverStripDebugInfo` 设置完全关闭调试符号剥离。理论上,没有理由不能将使用此设置构建的应用程序提交到应用商店,但策略各不相同,并且无法保证 - 请注意,调试信息可能会泄露您可能希望保留专有的应用程序详细信息。
settings =
{
    build =
    {
        neverStripDebugInfo = true,
    },
}