Android Portal&Bundle 接入问题

本文介绍了 Android Portal&Bundle 常见的接入问题。

编译时无网络连接

在编译文件时,如果没有网络,很有可能造成编译失败。通过以下步骤,确认编译环境的网络已连接。

  1. 确认已连接到互联网。

  2. 确认未连接网络代理,包括浏览器代理设置、第三方网络代理软件等。

  3. 确认未设置 IDE 代理。

    idea 代理
  4. gradle.properties 文件中,确认未设置 Gradle 代理,即未设置 systemProp.http.proxyHostsystemProp.http.proxyPort 属性。如果有设置,删除相关属性即可。 gradle代理

程序编译失败

如果程序编译失败,可通过以下步骤进行排错与解决。

  1. 根据 编译时无网络连接,确认编译环境网络已正常连接。

  2. 检查 Gradle 执行记录,确认新增的依赖有效。

  3. 检查依赖的 GAV(groupartifactversion)参数设置正确。

    //引用 debug 包group:artifact:version:raw@jar
    bundle "com.app.xxxxx.xxxx:test-build:1.0-SNAPSHOT:raw@jar"
    //引用 release 包group:artifact:version@jar
    bundle "com.app.xxxxx.xxxx:test-build:1.0-SNAPSHOT@jar"
    manifest "com.app.xxxxx.xxxx:test-build:1.0-SNAPSHOT:AndroidManifest@xml"
  4. 在系统自带的命令行工具中,执行以下命令,导出 Gradle 执行记录:

    // 执行命令前,确认未定义 productflavor 属性。否则,命令会运行失败。
    // 以下命令将执行记录导出至 log.txt 文件中。
    gradle buildDebug --info --debug -Plog=true > log.txt
  5. 查看步骤 4 中导出的记录文件,在最新生成的记录中,会看到类似如下记录,表示新增的依赖不存在。

    Caused by: org.gradle.internal.resolve.ArtifactNotFoundException: Could not find nebulacore-build-AndroidManifest.xml (com.alipay.android.phone.wallet:nebulacore-build:1.6.0.171211174825).
    Searched in the following locations:
    http://mvn.cloud.alipay.com/nexus/content/repositories/releases/com/alipay/android/phone/wallet/nebulacore-build/1.6.0.171211174825/nebulacore-build-1.6.0.171211174825-AndroidManifest.xml
         at org.gradle.internal.resolve.result.DefaultBuildableArtifactResolveResult.notFound(DefaultBuildableArtifactResolveResult.java:38)
         at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.CachingModuleComponentRepository$LocateInCacheRepositoryAccess.resolveArtifactFromCache(CachingModuleComponentRepository.java:260)
  6. 访问该记录中的 HTTP 链接(如上一步所列记录中的第 3 行)并登录,查看 Maven 仓库。

    说明

    您可以在 build.gradle 文件中查看登录时需要提供的账户名和密码。

  7. 执行以下命令刷新 gradle 缓存。

    gradle clean --refresh-dependencies
  8. 如果 Maven 仓库有对应依赖,删除个人目录下 Gradle 缓存,然后重新编译。删除 Gradle 缓存的方法如下:

    • 在 macOS、Linux、Unix 等系统中运行以下命令。

      cd ~
      cd .gradle
      cd caches
      rm -rf modules-2
    • 在 Windows 系统中,默认情况下,路径定位到 C:\Users\\{用户名}\\.gradle\caches,删除 modules-2 文件夹。

编译过程中出现卡顿

如果编译过程卡顿(等待超过 20 分钟),您可以通过以下步骤提高编译效率。

  1. 根据 上文步骤,确认编译环境网络已正常连接。

  2. 确认防火墙已关闭。

  3. 确认未开启 IntelliJ IDEA 编译器的网络配置。

  4. 在代码中,提前加载 Maven 镜像。例如,以下是阿里云加载 Maven 镜像的代码。

     apply plugin: 'maven'
     buildscript {
         repositories {
             mavenLocal()
    
     // 开始先加载 Maven 镜像
             maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
    
             maven {
                 credentials {
                     username "请使用已知用户"
                     password "请使用已知密码"
                 }
                 url "http://mvn.cloud.alipay.com/nexus/content/repositories/releases/"
             }
         }
         dependencies {
             classpath 'com.android.tools.build:gradle:2.1.3'
             classpath 'com.alipay.android:android-gradle-plugin:2.1.3.3.3'
             classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
         }
     }
     allprojects {
         repositories {
             flatDir {
                 dirs 'libs'
             }
             mavenLocal()
             maven {
                 credentials {
                     username "xxxxxxxxx"
                     password "xxxxxxx"
                 }
                 url "http://mvn.cloud.alipay.com/nexus/content/repositories/releases/"
             }
             maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
         }
     }

编译不通过且出现 NullPointerException

空指针异常在接入专有云时,下载配置文件并接入 mPaaS 后,编译不通过并且出现 NullPointerException。如果遇到此类问题,一般需要对 config 配置文件中的字段进行检查。检查 13 个字段是否有缺少,和公有云下载过来的文件进行对比,确认字段名是否正确。

如何调试应用

开发过程中需要调试代码,本文介绍两种调试方式。

  • 以调试模式启动应用

  • 应用运行后调试

以调试模式启动应用

  • 使用场景

    希望调试应用启动时的最初代码,比如在 application init 时初始化代码。

  • 操作步骤

  1. 执行命令 adb shell am start -W -S -D 应用包名/应用第一个启动的页面类名。例如,mPaaS Demo 的包名是 com.mpaas.demo,应用第一个启动的页面类名是com.alipay.mobile.quinox.LauncherActivity,那么可以使用命令行 adb shell am start -W -S -D com.mpaas.demo/com.alipay.mobile.quinox.LauncherActivity 以调试模式启动应用。第一个启动的类名如下图所示。

    img
  2. 执行命令之后,手机会弹出如下对话框。

  3. 对希望调试的代码行设置断点,然后附着到应用所在进程即可,如图。

    修改2.jpg

应用运行后调试

  • 使用场景

    在触发某个事件之后进行调试,比如单击某个按钮或者跳转某个页面才需要调试。

  • 操作步骤

    在应用运行后,单击附着进程(process)按钮,或者在执行上述命令后,再单击附着按钮开始调试。

在 mPaaS Portal&Bundle 工程中使用 MultiDex 的注意事项

Portal 和 Bundle 不建议介入 MultiDex,除非您是单 portal 工程,需要使用multiDexEnabled true。如果您的 Bundle 过大,目前只能使用拆分 bundle 的方式进行,不要在 bundle 中开启 multidex 支持。

如何清除 Gradle 缓存

打开 Gradle 插件的设置界面,单击 Clean Cache 按钮,即可删除 Gradle 插件的所有缓存数据。

插件设置界面

如何升级到最新的 Gradle 插件

说明

本节内容只适用于 10.1.68 系列基线。更多关于该版本基线的信息,请参见 基线简介10.1.68 系列基线发布说明

目前 Google 官方提供的 Android Gradle Plugin 是 3.5.x 版本。

mPaaS 也提供了 3.5.x 版本的插件作为适配,可支持 Google Android Gradle Plugin 3.5.3 和 Gradle 6.2 的 API。

引入方式的变化

  1. 您只需要通过添加以下依赖来引入我们的插件,不需要引入 Android Gradle Plugin 官方插件,因为依赖传递的关系,会自动引入。

    dependencies {
    classpath 'com.alipay.android:android-gradle-plugin:3.5.18'
    }
  2. Gradle Wrapper 的版本需要升级到 5.6 以上,推荐使用 6.2。

使用方式的变化

  • 不再需要使用 apply plugin:'com.android.application'

    • 如果您是 portal 工程,仅需要使用 apply plugin:'com.alipay.portal'

    • 如果您是 bundle 工程,需要删除 apply plugin:'com.android.application', 仅需要使用 apply plugin:'com.alipay.bundle'

    • 如果您是 library 工程,需要删除 apply plugin:'com.alipay.library', 仅需要使用 apply plugin:'com.android.library

  • 如果使用最新稳定版本 Android Studio 3.5 或以上,那么您需要在 gradle.properties 里面新增 android.buildOnlyTargetAbi=false

  • 由于我们的无线保镖组件暂不支持 V2 签名,如果您需要使用 Android Studio 调试并安装您的 APK,那么您需要禁用 V2 签名;如果您使用命令行进行构建,且您的 minSdkVersion 大于等于 24,则您也需要禁用 V2 签名。禁用 V2 签名的方式如下:

    v2SigningEnabled false
重要

清除缓存后需观察确认小程序和 H5 能否正常工作。