编辑 appinfo

appinfo.json 配置文件包含存储为键值对的信息,这些信息用于定义应用程序的操作。 文件中定义的许多属性均AppStudio 设置中配置,但有时您必须手动为文件添加项目。

默认情况下,下面列出的某些类别不在 appinfo.json 配置文件中。 其他类别已经出现在配置文件中,其属性需要在设置中进行管理。 本主题中列出的属性是对在设置中配置的属性的补充。

appinfo.json 文件位于应用程序的主文件夹中。 要对其进行访问,请在 ArcGIS AppStudio 中单击应用程序的文件按钮。

功能

功能类别将已存在于 appinfo.json 配置文件中,且可能会使用设置工具的功能部分中已选择的选项进行填充。 您还可以手动添加以下任何属性。

  • backup - 当设置为 false 时,不会在 Android 中对应用程序执行备份或恢复,且应用程序将被排除在全系统备份之外。 如果未定义,则默认值为 false。
  • ios.appTransportSecurity.allowArbitraryLoads - 如果设置为 false,则传输安全限制将应用于网络连接。 如果未定义,则默认值为 false。
  • interAppFileSharing - 当设置为 true 时,可以在 iOS 中使用 Files 应用程序访问应用程序中的文件。 如果未定义,则默认值为 false。
  • mediaLocation - 设置为 true 时,您的应用程序可以从照片中检索未编校的 Exif 元数据。 如果未定义,则默认值为 false。
  • indoorLocation - 设置为 true 时,系统将启用室内定位所需的所有蓝牙功能。 如果未定义,则默认值为 false。

在以下示例中,没有应用传输安全限制。

"capabilities": {
    "ios": {
        "appTransportSecurity": {
             "allowArbitraryLoads": true
    }
},

部署

部署类别将已存在于 appinfo.json 配置文件中,且可能会使用设置工具的平台高级部分中已选择的选项进行填充。 您还可以手动添加以下任何属性。

  • android.trustUserCertificates - 将此属性设置为 true 将导致您的应用程序接受所有证书颁发机构。 默认情况下,此属性为 false 且 AppStudio 应用程序不信任用户添加的证书颁发机构,以保证 Android 上的安全连接。
  • android.minimumSdkVersion - 定义应用程序运行所需的最低 API 级别。 如果未指定,则 AppStudio 应用程序的默认值为 23。
  • android.targetSdkVersion - 为应用程序定义预期的 API 级别。 它还会影响到用户授予应用程序权限的方式。 如果设备运行的是 Android 6.0 或更高版本,且应用程序的目标 SDK 为 23 或更高的值,则用户必须在应用程序运行时请求所需的一切权限。 如果未指定,则对于本地构建,AppStudio 应用程序的默认值为 31,对于云构建则为 33。 有关详细信息,请参阅 Google Play 控制台帮助
    注:

    本地构建用户必须在其应用程序的 appinfo.json 文件中将 deployment.android.targetSdkVersion 设置为 33,才能满足 https://developer.android.com/google/play/requirements/target-sdk 中列出的要求。

  • android.enableGooglePlayServicesSecurityProvider - 控制您的应用程序是否调用 Google Play 安全服务提供程序,以确保该应用程序在具有最新更新的设备上运行,保护其免受已知攻击的威胁。 如果未指定,则 AppStudio 应用程序的默认值为 false。
  • ios.minimumVersion - 定义软件可运行的最低操作系统版本。 如果未指定,则 AppStudio 应用程序的默认值为 13.0。
  • desktop.allowOverwrite - 如果将值设置为 true,则可以在 Windows 上安装该应用程序,而无需卸载该应用程序的先前版本。如果未定义,则默认值为 false。

在以下示例中,Android 将接受所有证书颁发机构,并且支持为 AndroidiOS 安装应用程序的最低操作系统分别为 6.0 和 13.0。

"deployment": {
    "android": {
        "trustUserCertificates": true,
        "minimumSdkVersion": 23,
        "targetSdkVersion": 31
    },
    "ios": {
        "minimumVersion": "13.0"
    }
},

显示

显示类别将已存在于 appinfo.json 配置文件中,且可能会使用设置工具的显示部分中已选择的选项进行填充。 您还可以手动添加以下任何属性。

  • enableHighDpi - 确定应用程序是否以高 DPI 模式在支持此模式的设备上打开。 如果未定义,则默认值为 false。
  • statusBar - 定义在 iOSAndroid 设备中使用应用程序时是否显示状态栏。 该属性不应与 usesStatusBar 属性相混淆,后者由状态栏选项控制,这些选项位于应用程序的设置 > 设备选项卡上,用于控制在手机或平板上是否显示状态栏。 如果未定义,则默认值为 false。
  • ios.windowMode - 定义应用程序如何与 iPad 的多任务功能交互,从而使该应用程序可以与其他应用程序在同一屏幕上一起使用。 默认情况下,如果在应用程序的设置 > 设备选项卡的“平板电脑”选项中禁用了纵向或横向模式,则会启用此属性。要禁用 ios.windowMode(允许您的应用程序仅在 iPad 的全屏模式下运行),请将其设置为 fullscreen

在以下示例中,启用了高 DPI,在所有 iOS 设备上启用了状态栏,并且该应用程序将仅在 iPad 上全屏运行。

"display": {
    "enableHighDpi": true,
    "statusBar": true,
    "ios": {
       "windowMode": "fullscreen"
    }
},

Make

appinfo.json 配置文件中尚不存在创建类别。 您可以手动添加以下任何属性。

  • ignore - 定义构建应用程序时要从应用程序源排除的文件名模式列表。 这允许在应用程序项目中保留开发和测试时有用,但构建应用程序时无用的文件。
  • ios.enableBitcode - 指定应用程序是否支持 Bitcode。 Apple 可用于优化特定设备的应用程序二进制,无需更新或重新提交即可实现。 Bitcode 仅适用于 iOS 应用程序,对于 Apple App Store 构建,默认其处于启用状态。

管理

appinfo.json 配置文件中尚不存在管理类别。 您可以手动添加以下任何属性。

  • configurationSchema - 接受 .xml 文件的文件名或路径,该文件包含使用企业移动管理 (EMM) 软件部署应用程序时使用的应用程序配置默认值。 有关设置此 .xml 文件格式的详细信息,请参阅关于设置托管配置Android 开发人员参考。
  • android.restrictionFile - 接受 .xml 文件的文件名或路径,该文件用于在 Android 设备上施加限制。 当您使用 EMM 软件部署应用程序时,使用应用程序配置将需要此属性。 有关设置此 .xml 文件格式的详细信息,请参阅 RestrictionsManagerAndroid 开发人员参考。
  • windows.applicationName - 需要应用程序配置属性的应用程序的名称(如果应用程序需要企业配置)。
  • windows.keyRoot - 注册表项根目录,可在其中查找这些应用程序配置属性。 如果未指定,则该默认值为 HKEY_CURRENT_USER
  • windows.vendorName - 负责应用程序的软件供应商名称。 对于 Esri 应用程序,值为 ESRI

以下示例中列出了使用 EMM 软件部署应用程序时使用的配置文件和参数。

"management": {
     "android": {
         "restrictionFile": "AppConfig_Android.xml"
     },
     "configurationSchema": "AppConfig.xml",
     "windows": {
         "applicationName": "MyApp",
         "keyRoot": "HKEY_CURRENT_USER",
         "vendorName": "MyName"
     }
},

资源

部署类别将已存在于 appinfo.json 配置文件中,且可能会使用设置工具的资源部分中已选择的选项进行填充。 您还可以手动添加以下任何属性。

  • appIconBackgroundColor - 接受十六进制颜色值,并定义确定具体图标形状的平台的背景填充颜色。 例如,iOS 强制应用程序图标显示为圆角矩形,并自动使用黑色填充透明区域。 如果没有指定其他值,则应用平台的默认行为。
  • launchImageTextColor - 允许使用十六进制颜色值定义应用程序启动画面中显示的文本颜色。 此文本的默认颜色为黑色,对于某些应用程序的启动画面而言,可能很难看到黑色文本。
  • platformName.appIcon - 此外,platformName 应被替换为您使用的平台。 允许您使用文件路径来定义平台特定应用程序图标。 如果没有为平台提供图标,则系统会使用为应用程序提供的常规图标。
  • android.adaptiveIcons - 当设置为 true 时,Android 设备将显示应用程序的自适应图标。 还应在资源下指定以下属性,以定义自适应图标元素的文件路径。
    • android.appIcon - 自适应图标启动器的文件路径。 引用前景和背景文件。
    • android.appIconForeground - 自适应图标前景的文件路径。 可以是 .xml.png 文件。
    • android.appIconBackground - 自适应图标背景的文件路径。 可以是 .xml.png 文件。
    • android.appIconBackgroundColor - 十六进制颜色值,android.appIconBackground 的可选替代方案。 如果两者均已定义,则系统将使用 android.appIconBackground

以下代码示例显示了 Android 的自适应图标和每个平台的唯一图标。

"resources": {
    "android": {
       "adaptiveIcons": true,
	      "appIcon": "ic_launcher.xml",
	      "appIconBackgroundColor": " ic_launcher_background.xml",
	      "appIconForeground": " ic_launcher_foreground.xml"
	     
    },
    "ios": {
        "appIcon": "ios_appicon.png"
    },
    "linux": {
        "appIcon": "linux_appicon.png"
    },
    "macos": {
        "appIcon": "mac_appicon.png"
    },
    "windows": {
        "appIcon": "windows_appicon.png"
    }
},

自适应图标是 Android 独有的,用于确保您的应用程序图标在各种操作系统配置下均可按预期显示。 自适应图标可以显示为圆形、方形或介于两者之间的变体。 在最基本的层面上,自适应图标可以由前景中的 .png 和作为背景的单色构成。 任何工具都可用于创建 .png,但重要的是要确保您的图像具有足够的填充,以免被操作系统应用的掩膜裁剪。 有关自适应图标文件的大小和形状规范,请参阅自适应图标EasyAppIcon 等在线工具可用于创建自适应图标所需的所有文件,但可能仅限于创建特定的文件输出。 为了获得创建自适应图标的最佳体验,建议您使用 Android Studio

在上面的示例代码中,.xml 文件被同时用于前景和背景。 以下代码示例显示了引用前景和背景文件的 ic_launcher.xml 文件的内容。

<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@color/ic_launcher_background"/>
    <foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

以下示例代码显示了 ic_launcher_background.xml 文件的内容,该文件描述了纯蓝色背景。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="ic_launcher_background">#3697f0</color>
</resources>

以下示例代码显示了 ic_launcher_foreground.xml 文件的内容,该文件会将 AppStudio“运行”图标 Player 描述为前景图像。

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="108dp"
    android:height="108dp"
    android:viewportWidth="108"
    android:viewportHeight="108">
  <group android:scaleX="1.62"
      android:scaleY="1.62"
      android:translateX="28.08"
      android:translateY="28.08">
    <path
        android:fillColor="#FF000000"
        android:pathData="M22.079,1L9.92,1A1.921,1.921 0,0 0,8 2.921L8,28.08A1.921,1.921 0,0 0,9.921 30L22.08,30A1.921,1.921 0,0 0,24 28.079L24,2.92A1.921,1.921 0,0 0,22.079 1zM23,28.08a0.922,0.922 0,0 1,-0.921 0.92L18,29v-1h-4v1L9.921,29A0.922,0.922 0,0 1,9 28.08L9,27h14zM23,26L9,26L9,4h14zM23,3L9,3v-0.08A0.922,0.922 0,0 1,9.921 2L22.08,2a0.922,0.922 0,0 1,0.921 0.92zM12.1,10.417L12.1,20.7l8.227,-5.142zM12.9,11.86l5.917,3.698 -5.917,3.699z"/>
  </group>
</vector>

翻译

生成应用程序的翻译文件后,您必须确保在 appinfo.json 文件中引用这些文件。 有关准备要翻译的应用程序以及生成翻译文件的详细信息,请参阅全球化应用程序

一旦应用程序项目中存在这些文件,pathfileName 属性就必须在 appinfo.json 文件中的新类别 translations 下添加,以记录其位置。

以下示例会将 Map Viewer 模板应用程序中的文件进行关联:

"translations": {
    "path": "MapViewer/languages",
    "fileName": "MapViewer"
}

将上述代码示例添加到 appinfo.json 文件后,所构建应用程序将使用 MapViewer 语言文件夹中名为 MapViewer_localecode.qm 的文件(例如,MapViewer_en.qm 和 MapViewer_ja.qm)。

使用描述键

直接编辑 appinfo.json 文件的一种常见情况是添加使用描述键。 这些简短的字符串描述了您的应用程序请求使用某些功能(如相机、后台位置捕获或蓝牙)的原因。 此为 iOS 设备和 macOS 设备的要求,目前无法在其他平台上对其进行使用。 然而上述内容旨在将来作为用户界面项目实现,目前必须通过手动添加。

必须将各个使用描述添加到 usageDescriptionKeys 标题下方。 可随时将此部分插入到 appinfo.json 文件中。 值的顺序不对功能造成影响。 虽然对任何功能(即使是应用程序不支持的那些功能)添加说明都不会造成不利影响,但应用程序构建过程中将不会添加不必要的说明字符串。

在以下代码示例中,不会使用 bluetoothUsageDescription,原因在于应用程序不包含蓝牙功能。

"usageDescriptionKeys": {
    "bluetoothUsageDescription": "This app uses Bluetooth to scan and connect to devices. (iOS only)",
    "cameraUsageDescription": "This app needs access to the camera to take a picture. (iOS only)",
    "faceIDUsageDescription": "This app uses face ID to authenticate using facial recognition. (iOS only)",
    "locationAlwaysUsageDescription": "This app needs access to device location when the app is running or in the background. (iOS and macOS)",
    "locationWhenInUseUsageDescription": "This app needs access to device location when the app is running. (iOS and macOS)",
    "microphoneUsageDescription": "This app needs access to a microphone to record audio. (iOS only)",
    "photoLibraryUsageDescription": "This app needs access to the photo library to select a photo. (iOS only)",
    "photoLibraryAddUsageDescription": "This app uses your photo library to save photos in the camera roll for use in the app. (iOS only)",
    "locationAlwaysAndWhenInUseUsageDescription": "This app needs access to device location when the app is running or in the background. (iOS and macOS)",
    "sensorsUsageDescription": "This app uses the Activity Recognizer to identify device motion."
},

其他属性

将在任何类别之外添加以下属性:

queryApps.packageNames - 将该属性添加到任何部分之外。 将接受一个应用程序包名称列表,然后在 Android 设备上使用时由 AppFramework 组件中的 isAppInstalled 函数查询。