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

Android应用程序-仅在发布包中显示错误,android,firebase,kotlin,debugging,release,Android,Firebase,Kotlin,Debugging,Release,我最近将我的第一个Kotlin Android应用程序上传到Google Play控制台的一个封闭测试(alpha)轨道上。审查已经完成,我与一些测试人员分享了我的链接。不幸的是,发布包中有调试APK中不存在的主要bug!(当我在Android Studio中点击“Run”时自动生成的)。我在我的设备上检查了这两个捆绑包,调试版本工作得很好,但版本无法使用。是否仍然需要调试发布版本???或者可以创建一个模拟其行为的可调试构建(因为出于安全原因,发布构建被设置为不可调试…)。有没有办法查看应用程序

我最近将我的第一个Kotlin Android应用程序上传到Google Play控制台的一个封闭测试(alpha)轨道上。审查已经完成,我与一些测试人员分享了我的链接。不幸的是,发布包中有调试APK中不存在的主要bug!(当我在Android Studio中点击“Run”时自动生成的)。我在我的设备上检查了这两个捆绑包,调试版本工作得很好,但版本无法使用。是否仍然需要调试发布版本???或者可以创建一个模拟其行为的可调试构建(因为出于安全原因,发布构建被设置为不可调试…)。有没有办法查看应用程序日志?(或者在发布版本中删除了它们?)

我认为重要的是要提到所有的bug都与Firebase操作有关。我的Firebase项目具有所有必需的“SHA证书指纹”(用于调试、上载和应用程序签名密钥的SAH-1和SHA-256)。也许又少了一样东西

也许具体的bug可以指出差异的根源,因此以下是我的两个最大bug:

  • 每个用户文档都包含一个项目列表,该列表显示在其屏幕之一的recyclerView中。在发布版本中,未显示任何项目。我检查了Firestore控制台,项目已成功添加(从任何版本),并在使用调试版本登录同一用户时显示
  • 无法通过电话号码登录(在Firebase auth预构建的UI中)。其他方法也很好。我甚至可以将手机链接到现有帐户,但在我输入电话号码并重置到初始屏幕后,预构建的登录流停止。在调试版本中运行良好
  • 有人遇到过这样的事情吗


    任何帮助都将不胜感激。

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

    release {
            debuggable true
            minifyEnabled false
            shrinkResources false
        }
    
    这将帮助您调试发布版本,确保
    minifyEnabled
    shrinkResources
    为false

    要使用
    Release密钥库运行应用程序的
    Release
    版本,请使用以下命令

    signingConfigs {
        release {
            storeFile file('file location')
            storePassword 'your store password'
            keyAlias 'your key alias'
            keyPassword 'your key password'
        }
    }
    
    然后添加此版本的变体

    release{
        signingConfig singingConfigs.release
    }
    

    我找到了调试发布包的方法。问题是“release”构建变量使用了默认的签名密钥-调试密钥。我必须用一把安全的钥匙。最后,我的“build.gradle(:app)”文件中有以下代码:

    。。。
    def keystorePropertiesFile=rootProject.file()
    def keystreproperties=新属性()
    加载(新文件输入流(keystoreProperties文件))
    安卓{
    签名配置{
    爱奥尼斯{
    keyAlias密钥复制属性['keyAlias']
    keyPassword密钥复制属性['keyPassword']
    storeFile文件(keystoreProperties['storeFile'])
    storePassword密钥复制属性['storePassword']
    }
    }
    ...
    建筑类型{
    释放{
    ...
    signingConfig signingConfigs.ionce
    }
    }
    ...
    }
    ...
    
    (我选择这样做。如果这样做,请注意
    storeFile
    字段中的“\”方向,因为错误信息不多。帮助了我)

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

  • 构建变量之间的区别在于,在我的“发布”变量中,我使用了
    minifyEnabled true
    ,这会更改属性名称以缩小代码。从Firestore获取文档时,文档与对象结构不匹配,无法加载列表。解决办法就在这里
  • 这一点与构建类型的差异无关-似乎在升级gradle中的firebase auth库后,我没有检查该功能。升级firebase ui验证库(如图所示)成功了:)

  • 我添加了您建议的内容,但当我尝试使用“release”构建变量运行时,仍然出现以下错误:“安装未成功。无法安装应用程序:安装\解析\失败\没有\证书”。我假设内部构建过程使用调试键对应用程序进行签名,而不考虑变量?。。。有没有办法将Android Studio调试器附加到非由它启动的Android进程?因为我运行buggy bundle的唯一方法是单击我手机中的图标。你需要先卸载旧的,然后再试一次。事实并非如此。检查编辑的应答器。这就是我的意思,将你自己的发布密钥凭据而不是我拥有的调试密钥凭据放在上面,我想这在“storeFile”文件中是清楚的('file location')”,很高兴它为您解决了问题
    ...
    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
            }
        }
    ...
    }
    ...