Android 应用程序 - 仅在发布包中显示的错误

Android app - bugs showing only in release bundle

我最近将我的第一个 Kotlin-Android 应用程序上传到 Google Play 控制台的封闭测试(alpha)轨道。审核已完成,我与一些测试人员分享了我的 link。不幸的是,发布包有调试 APK 中不存在的主要错误! (当我在 Android Studio 中点击“运行”时自动生成的那个)。我在我的设备上检查了两个包,调试版本工作得很好,而发布版不可用。无论如何调试发布版本???或者创建一个可调试的构建来模仿它的行为(因为出于安全原因将发布构建设置为不可调试......)。有没有办法查看应用程序日志? (或者它们在发布版本中被删除了?)

我认为值得一提的是所有错误都与 Firebase 操作有关。我的 Firebase 项目具有所有需要的“SHA 证书指纹”(用于调试、上传和应用程序签名密钥的 SAH-1 和 SHA-256)。可能还有什么东西不见了?

也许具体的错误可以指出差异的根源,所以这些是我最大的 2 个错误:

  1. 每个用户文档都包含一个项目列表,该列表显示在他的一个屏幕的 recyclerView 中。在发布版本中,没有显示任何项目。我检查了 Firestore 控制台,项目已成功添加(来自任何版本),当我使用调试版本登录同一用户时,它们会显示。
  2. 无法通过 phone 号码登录(在 Firebase 身份验证预建 UI 中)。其他方法工作正常。我什至可以 link 一个 phone 到现有帐户,但在我输入 phone 号码并重置到初始屏幕后,预建的登录流程停止。在调试版本中运行良好。

有人遇到过这样的事情吗?

如有任何帮助,我们将不胜感激。

您可以将此 debuggable true 添加到您的 gradle 文件中

release {
        debuggable true
        minifyEnabled false
        shrinkResources false
    }

这将帮助您调试发布版本,确保 minifyEnabledshrinkResources 为 false

到 运行 Release 版本的应用 Release Keystore 使用此

signingConfigs {
    release {
        storeFile file('file location')
        storePassword 'your store password'
        keyAlias 'your key alias'
        keyPassword 'your key password'
    }
}

然后在release的变体中加入this

release{
    signingConfig singingConfigs.release
}

我找到了调试发布包的方法。问题在于“发布”build 变体使用了默认的签名密钥——调试密钥。我必须 Configure the build process to automatically sign my app 使用安全密钥。最后,我的“build.gradle (:app)”文件中有以下代码:

...
def keystorePropertiesFile = rootProject.file(<keystore.properties file location>)
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
    signingConfigs {
        ionce {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }
...
    buildTypes {
        release {
...
            signingConfig signingConfigs.ionce
        }
    }
...
}
...

(我选择Remove signing information from my build files. If you do, pay attention to the "\" orientation in the storeFile field as the error is not very informative. This answer帮助了我)

如果有人也遇到我提到的两个问题之一,这里是解决方案:

  1. build 变体之间的区别在于,在我的“发布”变体中,我使用了 minifyEnabled true,它更改了属性的名称以缩小代码。从 Firestore 获取文档时,它与对象结构不匹配,无法加载列表。解决方案就在这个answer.
  2. 这与 build 类型的差异无关 - 似乎我在 gradle 中升级 firebase-auth 库后没有检查该功能。升级 firebase-ui-auth 库,就像这个 一样,成功了:)