【问题标题】:Android app - bugs showing only in release bundleAndroid 应用程序 - 仅在发布包中显示的错误
【发布时间】:2021-03-22 03:34:53
【问题描述】:

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

我认为重要的是要提到所有错误都与 Firebase 操作有关。我的 Firebase 项目具有所有需要的“SHA 证书指纹”(用于调试、上传和应用签名密钥的 SAH-1 和 SHA-256)。也许还缺少另一件事?

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

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

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

任何帮助将不胜感激。

【问题讨论】:

    标签: android firebase kotlin debugging release


    【解决方案1】:

    我找到了调试发布包的方法。问题是“发布”构建变体使用了默认的签名密钥——调试密钥。我必须使用安全密钥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。如果你这样做,请注意storeFile字段中的“\”方向,因为错误信息不是很丰富。This answer帮助了我)

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

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

    【讨论】:

      【解决方案2】:

      你可以在你的 gradle 文件中添加这个debuggable true

      release {
              debuggable true
              minifyEnabled false
              shrinkResources false
          }
      

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

      要使用Release Keystore 运行应用程序的Release 版本,请使用此

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

      然后添加 release this 的变体

      release{
          signingConfig singingConfigs.release
      }
      

      【讨论】:

      • 我添加了您的建议,但当我尝试使用“发布”构建变体运行时,我仍然收到此错误:“安装未成功。无法安装应用程序:INSTALL_PARSE_FAILED_NO_CERTIFICATES”。我想无论变体如何,内部构建过程都会使用调试密钥对应用程序进行签名?...有没有办法将 Android Studio 调试器附加到不是由它启动的 Android 进程?因为我设法运行错误捆绑包的唯一方法是单击手机中的图标
      • 你需要先卸载旧的,然后再试一次
      • 我做了,不是那样的。
      • 如果我的解决方案对您有用,您可以将其标记为已解决吗?
      • 这就是我的意思,把你自己的发布密钥凭据而不是我拥有的调试凭据,认为从“storeFile 文件('文件位置')”中可以清楚地看到,很高兴它起作用了为你而战
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多