高级构建设置

本指南概述了 Solar2D 应用的各种高级构建选项。

本指南适用于需要更专业的配置选项和自定义应用设置的用户。如果您正在寻找通用/基本构建设置和选项,请参阅项目构建设置指南。

iOS 高级设置

设备功能

如果您希望将 iOS 应用限制在具有特定功能的设备上,可以在iphoneplist表中包含可选的 UIRequiredDeviceCapabilities 键。此键的值应该是一个包含与 Apple 文档匹配的特定键的表。例如:

settings =
{
    iphone =
    {
        plist =
        {
            UIRequiredDeviceCapabilities =
            {
                ["gyroscope"] = true,
            },
        },
    },
}

UIRequiredDeviceCapabilities 表中包含特定键时,其值应为布尔值,逻辑如下:

  • true — 设备必须具备关联功能才能运行应用。
  • false — 设备不得具备关联功能才能运行应用。
注意
  • 仅当您绝对必须限制应用的目标设备时,才应包含特定键 — 如果设备是否支持某种功能无关紧要,请省略其键。

  • 省略键的将产生与将其设置为 true 相同的结果。例如,以下两者等效:

UIRequiredDeviceCapabilities = { "gyroscope" }

UIRequiredDeviceCapabilities = { ["gyroscope"] = true }

PNG 处理

如果您需要在构建时绕过 PNG 文件处理 (pngcrush),可以包含值为 trueskipPNGCrush 键。此键应在 plist 表之外但在 iphone 表之内指定。

settings =
{
    iphone =
    {
        plist =
        {

        },
        skipPNGCrush = true,
    },
}

备用图标

如果您想在 xassets 项目中包含备用图标,请使用 alternateIcons 并包含图标名称数组。仅在 Solar2D Sim 2023.3692+ 中可用。

settings =
{
    iphone =
    {
        plist =
        {

        },
        xcassets = "Images.xcassets",
        alternateIcons = {"Icon1", "Icon2"},
    },
}

Android 高级设置

最低 SDK 版本

使用 minSdkVersion 键值提供最低 SDK 版本允许您将应用排除在安装在具有较旧版本 Android 操作系统的设备上。它对应于此处详细介绍的 minSdkVersion 项。此设置对用户不可见。

settings =
{
    android =
    {
        minSdkVersion = "16",
    },
}
注意
  • 最低 SDK 版本必须指定为整数 — 它不能包含任何小数点。

  • 对于 Android 4.0.3(Solar2D 支持的最旧版本),Solar2D 仅允许最低值为 "15"。有关各种 Android SDK 版本和 API 级别的详细信息,请参阅此处

  • 如果未另行指定,则最低 SDK 版本默认为 "15"

Android TV

如果您要将应用部署到 Android TV,则应包含值为 truesupportsTV 键。这将使 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,
        },
    },
}

禁用文件访问

默认情况下,其他应用被授予只读通过 Android content:// URL 访问您的应用文件的权限。这是将应用文件附加到电子邮件、通过社交插件发布照片或通过system.openURL()函数打开文件所必需的。如果要阻止对应用文件的所有访问,请在 build.settings 文件中设置以下内容:

settings =
{
    android =
    {
        allowAppsReadOnlyAccessToFiles = false,
    },
}
注意

您无法阻止已获得 root 权限的 Android 设备上的文件访问。这适用于所有 Android 应用,包括未用 Solar2D 构建的应用。因此,如果您的应用文件包含任何敏感信息,建议您自行加密这些信息。

大堆内存

您可以通过添加值为 `true` 的 `largeHeap` 键来请求 Android 操作系统为您的应用提供更多 Java 堆内存。例如,它可能会将特定设备上的最大堆大小从 32 MB 提高到 256 MB。如果您的应用在内存不足时触发低端设备上的异常,则此参数可能是一个可行的选项。

settings =
{
    android =
    {
        largeHeap = true,
    },
}

Android 指令

重要

本节详细介绍了可用于微调应用程序中 `AndroidManifest.xml` 的其他指令。它们很少需要,如果您不了解它们的作用,可能会破坏您的应用程序或导致意外行为。本质上,除非您熟悉所涉及的概念,否则建议使用这些指令。

以下专用指令可用于Solar2D 构建的Android 应用

  • `strings` - 此指令允许在 `.apk` 中创建 `strings.xml` 文件。
settings =
{
    android =
    {
        strings =
        {
            permdesc = "Custom permission description",
            permlabel = "custom-permission-Label",
        },
    },
}
  • `permissions` - 此指令允许创建自定义 Android 权限。
settings =
{
    android =
    {
        permissions =
        {
            {
                name = ".PERMISSION1",
                description = "@string/permdesc",
                icon = "@mipmap/icon",
                label = "@string/permlabel",
                permissionGroup = "android.permission-group.COST_MONEY",
                protectionLevel = "normal",
            },
        },
    },
}
  • `manifestChildElements` - 此指令将 XML 元素添加到 `AndroidManifest.xml` 的 `manifest` 元素中。
settings =
{
    android =
    {
        manifestChildElements =
        {
            -- Array of strings
            [[
            <uses-configuration android:reqFiveWayNav="true" />
            ]],
        },
    },
}
  • `applicationChildElements` - 此指令将 XML 元素添加到 `AndroidManifest.xml` 的 `application` 元素中。
settings =
{
    android =
    {
        applicationChildElements =
        {
            -- Array of strings
            [[
            <activity android:name="com.example.MyActivity"
                android:configChanges="keyboard|keyboardHidden"/>
            ]],
        },
    },
}
  • `apkFiles` - 此指令导致文件从项目目录复制到 `.apk` 文件的根目录,保留任何目录层次结构。在以下示例中,`google-play-services.json`被复制到 `.apk` 的根目录,`res/raw/mypage.html` 被复制到 `res/raw`。文件路径始终相对于项目的基目录。
settings =
{
    android =
    {
        apkFiles =
        {
            "google-play-services.json",
            "res/raw/mypage.html",
        },
    },
}
  • `coronaActivityFlags` - 此指令允许将属性添加到应用 `AndroidManifest.xml` 中的 `com.ansca.corona.CoronaActivity` 活动定义中。活动属性记录在此处

Solar2D 将以下属性用于自身目的,并且不能覆盖它们

属性
android:configChanges
android:label
android:launchMode
android:name
android:screenOrientation
android:theme
settings =
{
    android =
    {
        coronaActivityFlags =
        {
            resizeableActivity = true,
            persistableMode = "persistRootOnly",
        },
    },
}

插件 — 支持的平台

如有必要,您可以微调插件以仅在特定平台上受支持。这是通过包含一个 `supportedPlatforms` 表来完成的,其中包含键值(值为 `true`)指示插件应在其上受支持的平台。例如:

["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,
    },
}