迁移现有 Android 应用程序

improve this page | report issue

概述

要迁移使用 IBM MobileFirst Platform Foundation V6.2.0 或更高版本创建的现有本机 Android 项目,必须修改此项目以使用当前版本中的 SDK。然后,替换 V8.0 中停用或不包含的客户端 API。迁移辅助工具可扫描您的代码并生成要替换的 API 的报告。

跳至:

扫描现有的 MobileFirst 本机 Android 应用程序以准备升级版本

迁移辅助工具可帮助您准备使用 IBM Mobile Foundation 的先前版本创建的应用程序进行迁移,方法是扫描本机 Android 应用程序的源文件并生成 V8.0 中不推荐使用或停用的 API 的报告。

使用迁移辅助工具之前,务必了解以下信息:

  • 必须具有现有 Mobile Foundation 本机 Android 应用程序。
  • 您必须具有因特网访问权。
  • 您必须已安装 node.js V4.0.0 或更高版本。
  • 查看并了解迁移过程的限制。有关更多信息,请参阅从先前发行版迁移应用程序

对于使用 Mobile Foundation 先前版本创建的应用程序,在未进行一些更改的情况下在 V8.0 中不受支持。迁移辅助工具通过扫描现有应用程序中的源文件,识别 V8.0 中不推荐使用、不再支持或修改的 API,从而简化此过程。

迁移辅助工具不会修改或移动应用程序的任何开发人员代码或注释。

  1. 通过使用以下其中一种方法下载迁移辅助工具:
    • Jazzhub 存储库下载 .tgz 文件。
    • 从 MobileFirst Operations Console 下载 MobileFirst Developer Kit,其中包含名为 mfpmigrate-cli.tgz 的迁移辅助工具文件。
  2. 安装迁移辅助工具。
    • 切换到下载工具的目录。
    • 通过输入以下命令,使用 NPM 安装该工具:
    npm install -g
    
  3. 通过输入以下命令扫描 Mobile Foundation 应用程序:

    mfpmigrate scan --in source_directory --out destination_directory --type android
    

    source_directory
    项目的当前位置。

    destination_directory
    创建报告的目录。

    与 scan 命令一起使用时,迁移辅助工具会识别现有 Mobile Foundation 应用程序在 V8.0 中已移除、不推荐使用或更改的 API,并将它们保存在确定的目标目录中。

使用 Gradle 迁移 Android 项目

使用 Gradle 迁移带 MobileFirst SDK 的 Android 应用程序。

确保正确设置 Android Studio 和 Android SDK。有关如何设置系统的更多信息,请参阅 Android Studio 概述。项目在升级到 Mobile Foundation 之前必须符合 Android Studio/Gradle 设置且没有编译错误。

注:此任务假定使用 Android Studio 创建了 Android 项目,并且按照 Adding the Mobile Foundation SDK to a new or existing application with Android Studio (7.1) 所述添加了 MobileFirst SDK。

如果 Android Studio 项目设置为添加先前版本的 MobileFirst SDK,请从 build.gradle dependencies 节中移除 compile 组。例如,如果是从 7.1 进行升级,请移除该组:

compile group: 'com.ibm.mobile.foundation', 
            name:'ibmmobilefirstplatformfoundation', 
            version:'7.1.0.0', 
            ext: 'aar', 
            transitive: true

现在,您可以使用本地或远程 SDK 文件来添加 V8.0.0 SDK 和配置。请参阅将 MobileFirst SDK 添加到 Android 应用程序

注:导入新的 SDK 后,需要手动导入 Javadoc 文件。请参阅将 Javadocs 注册到 Android Studio Gradle 项目。现在,您可以开始使用 MobileFirst SDK 来开发本机 Android 应用程序。 您可能需要根据 V8.0.0 API 中的更改来调整代码(请参阅更新 Android 代码)。

后续步骤

替换 V8.0 中停用或不包含的客户端 API。

更新 Android 代码

IBM Mobile Foundation V8.0 引入了一些对 Android SDK 的更改,这可能需要更改在先前版本中开发的应用程序。
下表列出 MobileFirst Android SDK 中的更改。

停用的 Android API 元素

API 元素 迁移路径
WLConfig WLClient.getConfig() 无替换。
  • WLDevice WLClient.getWLDevice()
  • WLClient.transmitEvent(org.json.JSONObject event)
  • WLClient.setEventTransmissionPolicy(WLEventTransmissionPolicy policy)
  • WLClient.purgeEventTransmissionBuffer()
使用 Android API 或第三方软件包进行地理定位。
  • WL.Client.getUserInfo(realm, key)
  • WL.Client.updateUserInfo(options)
无替换
  • WL.Client.getUserInfo(realm, key
  • WL.Client.updateUserInfo(options)
无替换
WLClient.checkForNotifications() 使用 WLAuthorizationManager.obtainAccessToken("", listener) 检查服务器连接并实施应用程序管理规则。
  • WLClient.login(java.lang.String realmName, WLRequestListener listener, WLRequestOptions options)
  • WLClient.login(java.lang.String realmName, WLRequestListener listener)
使用 AuthorizationManager.login()
  • WLClient.logout(java.lang.String realmName, WLRequestListener listener, WLRequestOptions options)
  • WLClient.logout(java.lang.String realmName, WLRequestListener listener)
使用 AuthorizationManager.logout()
WLClient.obtainAccessToken(java.lang.String scope,WLResponseListener responseListener) 使用 WLAuthorizationManager.obtainAccessToken(String, WLAccessTokenListener) 检查服务器连接并实施应用程序管理规则。
  • WLClient.getLastAccessToken()
  • WLClient.getLastAccessToken(java.lang.String scope)
使用 AuthorizationManager
WLClient.getRequiredAccessTokenScope(int status, java.lang.String header) 使用 AuthorizationManager
WLClient.logActivity(java.lang.String activityType) 使用 com.worklight.common.Logger
WLAuthorizationPersistencePolicy 无替换。要实现授权持久性,请在应用程序代码中存储授权令牌并创建定制 HTTP 请求。有关更多信息,请参阅 Java™ 定制资源请求实现样本
  • WLSimpleSharedData.setSharedToken(myName, myValue)
  • WLSimpleSharedData.getSharedToken(myName)
  • WLSimpleSharedData.clearSharedToken(myName)
使用 Android API 在应用程序之间共享令牌。
WLUserCertificateManager.deleteCertificate(android.content.Context context) 无替换
BaseChallengeHandler.submitFailure(WLResponse wlResponse) 使用 BaseChallengeHandler.cancel()
ChallengeHandler 对于定制网关验证问题,请使用 GatewayChallengeHandler。对于 MobileFirst 安全性检查验证问题,请使用 SecurityCheckChallengeHandler
   
WLChallengeHandler 使用 SecurityCheckChallengeHandler
ChallengeHandler.isCustomResponse() 使用 GatewayChallengeHandler.canHandleResponse()
ChallengeHandler.submitAdapterAuthentication 在验证问题处理程序中实施类似逻辑。对于定制网关验证问题处理程序,请使用 GatewayChallengeHandler
   

取决于旧 org.apach.http API 的 Android API 不再受支持

| API 元素 | 迁移路径 | |————-|—————-| | 现在不推荐使用 org.apache.http.Header[]。因此,移除了以下方法: | | | org.apache.http.Header[] WLResourceRequest.getAllHeaders() | 改用新的 Map<String, List<String>> WLResourceRequest.getAllHeaders() API。 | | WLResourceRequest.addHeader(org.apache.http.Header header) | 改用新的 WLResourceRequest.addHeader(String name, String value) API。 | | org.apache.http.Header[] WLResourceRequest.getHeaders(java.lang.String headerName) | 改用新的 List<String> WLResourceRequest.getHeaders(String headerName) API。 | | org.apache.http.Header WLResourceRequest.getFirstHeader(java.lang.String headerName) | 改用新的 WLResourceRequest.getHeaders(String headerName) API。 | | WLResourceRequest.setHeaders(org.apache.http.Header[] headers) | 改用新的 WLResourceRequest.setHeaders(Map<String, List<String>> headerMap) API。 | | WLResourceRequest.setHeader(org.apache.http.Header header) | 改用新的 WLResourceRequest.setHeaders(Map<String, List<String>> headerMap) API。 | | org.apache.http.client.CookieStore WLClient.getCookieStore() | 替换为 java.net.CookieStore getCookieStore WLClient.getCookieStore()

java.net.CookieStore getCookieStore WLClient.getCookieStore() | | WLClient.setAllowHTTPClientCircularRedirect(boolean isSet) | 无替换。MFP 客户机允许循环重定向。 | |

  • WLHttpResponseListener
  • WLResourceRequest,所有采用 WLHttpResponseListener 的方法:
    • WLResourceRequest.send(java.util.HashMap formParameters,WLHttpResponseListener listener)
    • WLResourceRequest.send(org.json.JSONObject json, WLHttpResponseListener listener)
    • WLResourceRequest.send(byte[] data, WLHttpResponseListener listener)
    • WLResourceRequest.send(java.lang.String requestBody,WLHttpResponseListener listener)
    • WLResourceRequest.send(WLHttpResponseListener listener)
    • WLClient.sendRequest(org.apache.http.client.methods.HttpUriRequest request,WLHttpResponseListener listener)
    • WLClient.sendRequest(org.apache.http.client.methods.HttpUriRequest request, WLResponseListener listener)
| 由于不推荐使用 Apache HTTP 客户机依赖关系而已移除。创建自己的请求,以对请求和响应具有完全控制。 |

Last modified on April 27, 2017