封装 Android 移动应用程序
本文介绍了 Citrix Endpoint Management™ 管理员如何封装第三方企业应用程序以及开发人员如何封装 ISV 应用程序。要封装 Android 移动应用程序,请使用 MDX Toolkit,它包含一个 macOS 图形界面工具和一个 Java 命令行工具。该命令行工具具有自定义选项,可从自动化应用程序封装过程的脚本中引用,并允许您预设一些 MDX 策略。
封装应用程序的文件类型为 .mdx。您可以将 .mdx 文件上传到 Endpoint Management 控制台,然后在其中配置 Endpoint Management Store 强制执行的特定应用程序详细信息和策略设置。用户登录时,应用程序会显示在应用商店中。然后,用户可以订阅、下载并将其安装到设备上。
-
下图概述了从安装 MDX Toolkit 到测试移动生产力应用程序的应用程序封装步骤。相关主题列在图表下方。
-

有关第一项的详细信息,请参阅:
- 系统要求
- 封装 Android 移动应用程序的其他要求
- Endpoint Management 兼容性
-
有关第二项的详细信息,请参阅:
- 使用命令行封装 ISV Android 应用程序
- 使用命令行封装企业 Android 应用程序
- 命令选项
- 预设 Android 应用程序的 MDX 策略
- 识别 Android 应用程序封装错误
- 从命令行收集应用程序日志
- 添加 MDX 应用程序
重要:
确保您的用户设备已更新到与用于封装应用程序的 MDX Toolkit 版本兼容的 Secure Hub 版本。否则,用户会收到有关不兼容性的错误消息。有关详细信息,请参阅 Endpoint Management 兼容性。
使用图形界面封装 ISV 应用程序
以下步骤介绍了从 Google Play 商店部署 ISV 应用程序的通用过程。
-
在使用工具包封装应用程序之前,务必备份这些应用程序的原始版本,以便在需要时可以恢复它们。
-
从 iOS 应用程序文件夹启动 MDX Toolkit,选择 “适用于独立软件供应商 (ISV)”,然后单击 “下一步”。

-
在 “从应用商店部署” 屏幕中,选择您的应用程序,然后单击 “下一步”。
-
在 “用户设置” 屏幕中,如果您已有应用商店 URL,请将其输入。如果没有 URL,请输入一个占位符,例如
https://play.google.com/store/apps/details?id=com.citrix。您可以稍后更新 URL。对于高级应用程序,请选择 “MDX 应用程序”。对于通用应用程序,请选择 “应用商店应用程序”。

-
在 “验证应用程序详细信息” 屏幕中,根据需要更新详细信息。
-
浏览到您的密钥库,然后单击 “创建”。

-
- 保存您的应用程序。

当 GUI 工具完成应用程序封装时,应用程序文件名中包含 _andr。
使用命令行封装企业 Android 应用程序
您可以使用企业应用程序封装来封装自定义(内部)应用程序和一些第三方应用程序。您应该直接从应用程序供应商处获取第三方应用程序。对于企业应用程序封装,请从 Android 应用程序 (.apk) 开始。在使用工具包封装应用程序之前,请备份这些应用程序的原始版本,以便在需要时可以恢复它们。
以下示例显示了一个使用默认设置的基本应用程序封装命令。应用程序使用提供的密钥库进行签名。密钥库是包含用于签署 Android 应用程序的证书的文件。如果密钥库包含多个私钥,则可以指定密钥别名。您只需创建一次密钥库。然后,您可以使用该密钥库来签署您封装的应用程序。如果您不使用相同的密钥库来封装以前部署的应用程序的新版本,则该应用程序的升级将不起作用。用户需要手动删除旧版本才能安装新版本。
请修改特定系统的粗体信息。尾随的反斜杠表示命令在下一行继续。请在运行命令之前删除这些符号。
注意:
由于 /Applications/ 目录受到限制,您可能需要以超级用户模式运行以下命令。为此,请在命令前面添加 sudo。从此受限目录运行时,系统将提示您输入计算机密码。
java -jar /Applications/Citrix/MDXToolkit/ManagedAppUtility.jar \
wrap \
-in ~/Desktop/SampleApps/Sample.apk \
-out ~/Desktop/SampleApps/Sample.mdx \
-keystore ~/Desktop/MyCompany.keystore \
-storepass MyKeystorePassword \
-keyalias MyCompanyKeyAlias \
-keypass MyKeyAliasPassword
<!--NeedCopy-->
-
以下是您可以在修改粗体信息后添加到上述命令的选项示例:
- -appName “封装的示例应用程序”
- -appDesc “这是我新封装的 Android 应用程序。”
此外,如果在开发过程中发布密钥库不可用,请使用以下命令创建使用您的密钥签名的移动应用程序的零售版本:
java -jar /Applications/Citrix/MDXToolkit/ManagedAppUtility.jar \
wrap \
-in ~/Desktop/SampleApps/Sample.apk \
-out ~/Desktop/SampleApps/Sample.mdx \
-keystore ~/Desktop/MyCompany.keystore \
-storepass MyKeystorePassword \
-keyalias MyCompanyKeyAlias \
-keypass MyKeyAliasPassword \
- -createCert
<!--NeedCopy-->
-
有关选项的详细信息,请参阅命令选项。有关内联文档,请使用
-help选项。 -
使用命令行封装 ISV Android 应用程序
- 在使用工具包封装应用程序之前,请务必备份这些应用程序的原始版本,以便在需要时可以恢复。要为 Android 生成封装的 ISV 应用程序,请从以下基本封装命令开始。
- java -jar /Applications/Citrix/MDXToolkit/ManagedAppUtility.jar \
- wrap \
- -in ~/Desktop/SampleApps/Sample.apk \
- -out ~/Desktop/SampleApps/Sample.mdx \
- -keystore ~/Desktop/MyCompany.keystore \
-storepass MyKeystorePassword \
-keyalias MyCompanyKeyAlias \
- -keypass MyKeyAliasPassword \
-createCert
<!--NeedCopy-->
-
要将应用程序封装为 ISV 应用程序,必须按如下方式设置
*-apptype*参数: -
Premium: 要将应用程序封装为 Premium 应用程序(即使对于非托管用户,也会强制执行某些 Citrix® 策略),请添加以下选项:
-apptype Premium -
General: 要将应用程序封装为 General 应用程序(对于非托管用户,不强制执行 Citrix 策略),请添加以下选项:
-apptype General -
如果需要将封装的 .apk 文件上传到 Google Play 商店或 Web 服务器,并且在封装时已知 URL,请添加
-storeURL选项。请务必同时设置 apptype 参数。 -
-storeURL "https://play.google.com/store/apps/details?id=com.zenprise" - 如果封装时不知道 URL,以后可以使用以下命令修改 .mdx 文件:
- java -jar /Applications/Citrix/MDXToolkit/ManagedAppUtility.jar \
- setinfo \
- -in ~/Desktop/SampleApps/Sample.mdx \
- -out ~/Desktop/SampleApps/wrapped/Sample.mdx \
- -storeURL \
- “https://play.google.com/store/apps/details?id=com.zenprise”
<!--NeedCopy-->
-
如果自定义了策略文件,请务必指向修改后的文件:
-
-policyxml /Applications/Citrix/MDXToolkit/data/policy_metadata.xml有关选项的详细信息,请参阅命令选项。有关内联文档,请使用**-help**选项。
命令选项
wrap 命令
- Help: 显示此命令的帮助。
- In: 必需。要封装的应用程序的路径和文件名。
- Out: 可选。生成的 .mdx 文件的路径和文件名。如果省略此选项,则文件具有与输入文件相同的路径和文件名,并具有 .mdx 扩展名。
- AppType: 可选。默认为 MDXOnly。要生成 ISV 应用程序,请使用 General 或 Premium。
- KeyStore: 密钥库文件的路径。如果对 .apk 文件进行签名,则为必需。
- StorePass: 密钥库的密码。如果对 .apk 文件进行签名,则为必需。
- KeyAlias: 密钥库中特定密钥的名称。如果对 .apk 文件进行签名,则为必需。
- KeyPass: 特定密钥的密码。如果对 .apk 文件进行签名,则为必需。
- SigAlg: 可选。签名时使用的算法。
- AppName: 可选。应用程序名称,如果可能,从应用程序中获取。
- AppDesc: 可选。应用程序描述,如果可能,从应用程序中获取。
- MinPlatform: 可选。支持的最低 SDK 级别。默认为空白。
- MaxPlatform: 可选。支持的最高 SDK 级别。默认为空白。
- ExcludedDevices: 可选。不允许运行应用程序的设备类型列表。默认为空白。
-
PolicyXML: 可选。替换 XML 策略定义文件和路径。默认为内置策略定义。示例:
-policyxml/Applications/Citrix/MDXToolkit/data/policy_metadata.xml有关详细信息,请参阅下一节“预设 Android 应用程序的 MDX 策略”。
- StoreURL: 对于 ISV 应用程序,应用程序在 Google App Store 中的 URL。默认为空白。
sign 命令
- Help: 显示此命令的帮助。
- In: 必需。要封装的应用程序的路径和文件名。
- Out: 可选。生成的 .mdx 文件的路径和文件名。如果省略此选项,则文件具有与输入文件相同的路径和文件名,并具有 .mdx 扩展名。
- KeyStore: 必需。密钥库文件的路径。
- StorePass: 必需。密钥库的密码。
- KeyAlias: 必需。密钥库中特定密钥的名称。
- KeyPass: 必需。特定密钥的密码。
- SigAlg: 可选。签名时使用的算法。
setinfo 命令
- Help: 显示此命令的帮助。
- In: 必需。要修改的应用程序的路径和文件名。
- Out: 对于 setinfo,输出路径或文件名必须与原始文件不同。
- AppType: 可选。默认为 MDXOnly。要生成 ISV 应用程序,请使用 General 或 Premium。
- KeyStore: 密钥库文件的路径。如果对 .apk 文件进行签名,则为必需。
- StorePass: 密钥库的密码。如果对 .apk 文件进行签名,则为必需。
- KeyAlias: 密钥库中特定密钥的名称。如果对 .apk 文件进行签名,则为必需。
- KeyPass: 特定密钥的密码。如果对 .apk 文件进行签名,则为必需。
- SigAlg: 可选。签名时使用的算法。
- AppName: 可选。应用程序名称,如果可能,从应用程序中获取。
- AppDes: 可选。应用程序描述,如果可能,从应用程序中获取。
- MinPlatform: 可选。支持的最低 SDK 级别。默认为空白。
- MaxPlatform: 可选。支持的最高 SDK 级别。默认为空白
- ExcludedDevices: 可选。不允许运行应用程序的设备类型列表。默认为空白。
- StoreURL: 对于 ISV 应用程序,应用程序在 Google App Store 中的 URL。默认为空白。
-
PolicyXML: 可选。替换 XML 策略定义文件和路径。默认为内置策略定义。示例:
-policyxml /Applications/Citrix/MDXToolkit/data/policy_metadata.xml有关详细信息,请参阅下一节“预设 Android 应用程序的 MDX 策略”。
预设 Android 应用程序的 MDX 策略
对于使用 MDX Toolkit 命令行工具封装的应用程序,可以预设一些 MDX 策略。在添加应用程序时,也可以在 Citrix Endpoint Management 控制台中配置策略。
-
更新策略 XML 文件中的策略值。
MDX Toolkit 安装程序会创建此策略文件:Applications/Citrix/MDXToolkit/data/policy_metadata.xml
注意
请注意,Android 和 iOS 的策略文件不同。要为这两个平台预设策略,必须更新其各自的策略 XML 文件。
-
使用命令行封装应用程序时,请包含
-policyxml /Applications/Citrix/MDXToolkit/data/policy_metadata.xml
识别 Android 应用程序封装错误
如果在封装 Android 应用程序时遇到错误,可以使用 MDX Toolkit 日志来识别错误。您必须具有管理员权限才能查看 MDX Toolkit 日志。
运行 MDX Toolkit 时,该工具会将日志文件保存到以下位置:Applications/CitrixMDXToolkit/Logs/Citrix.log。默认情况下,该工具会在日志中保存警告和错误。
从命令行收集应用程序日志
- 从 Android 开发者网站安装 Android 调试桥。有关详细信息,请参阅 Android 调试桥。
- 输入以下命令以清除现有日志:
**"adb logcat -c"** - 重现问题。
- 输入以下命令以将日志捕获到文件中:
**adb logcat -d > Name_of_Log_File.txt**