【问题标题】:Instant App isn't working in release (Instant app launch failed for an unknown reason (getInstantAppPreLaunchInfo failed))Instant App 无法在发布中运行(Instant App 启动因未知原因失败(getInstantAppPreLaunchInfo 失败))
【发布时间】:2017-10-27 13:30:52
【问题描述】:

当我点击链接即时应用程序启动器出现但导航到网络版本之后。 (Google Play 中的生产版本中的 IA)。

调试版完美运行。

我的清单文件与谷歌示例完全相同。 (使用我的链接和网站)

App link

我看到日志并找到以下几行:

com.google.android.instantapps.supervisor D/主管:UrlHandler 启动 com.google.android.instantapps.supervisor D/AutoManageHelper: 为客户端 0 启动 AutoManage com.google.android.instantapps.supervisor D/AutoManageHelper: onStart 真 {0=com.google.android.gms.common.api.internal.zzi$zza@d12b8e9} com.google.android.instantapps.supervisor E/OptInDirector:即时应用 由于未知原因启动失败(getInstantAppPreLaunchInfo 失败 - 检查以前的 logcat) com.google.android.instantapps.supervisor E/Supervisor:选择中止。 com.google.android.instantapps.supervisor I/PlayCommon:[38684] PlayEventLogger.uploadEventsImpl:准备上传日志 com.google.android.instantapps.supervisor W/PlayCommon:[38684] PlayEventLogger.getAuthToken:未提供身份验证令牌帐户 com.google.android.instantapps.supervisor I/PlayCommon:[38684] PlayEventLogger.uploadLog:连接到服务器: https://play.googleapis.com/play/log?format=raw&proto_v2=true 10-27 com.google.android.instantapps.supervisor I/PlayCommon:[38684] PlayEventLogger.handleResponse:成功 上传的日志。 com.google.android.instantapps.supervisor I/PlayCommon: [38684] PlayEventLogger.uploadEventsImpl:准备上传日志 com.google.android.instantapps.supervisor I/PlayCommon:[38684] PlayEventLogger.uploadEventsImpl:没有准备好发送的文件 com.google.android.instantapps.supervisor D/Supervisor:强制显示 加载屏幕,因为 400 毫秒的最后期限已到。 com.google.android.instantapps.supervisor D/主管:UrlHandler 停止

我认为这里出现错误:

即时应用启动失败,原因不明(即时应用启动 由于未知原因失败(getInstantAppPreLaunchInfo 失败 - 检查以前的 logcat)失败 - 检查以前的 logcat)

选择加入已中止。

【问题讨论】:

  • 你使用 Proguard 吗?您是否有单独的 AndroidManifest.xml 文件用于发布和调试?您是否使用不同的符号配置进行发布和调试?
  • @deadmoto 是的,我使用 proguard。我只有一份清单。 (每个模块)。是的,我使用标准密钥签署调试并创建自己的发布存储
  • 好吧,尝试禁用 Proguard 以进行发布,看看是否有帮助。此外,由于 Instant Apps 运行时尚未稳定,请在不同版本的 Android 上试用。
  • 我刚刚测试了您的免安装应用,没有发现任何问题。您是否更改了诸如禁用 Proguard 之类的设置?如果是,这可能就是您要查找的内容:issuetracker.google.com/issues/65710224

标签: java android google-play android-instant-apps


【解决方案1】:

此问题的临时解决方法是为每个功能模块配置一个大型“-keep”proguard。

要了解配置 proguard 时要保留哪些类,请执行以下操作:

  1. 将“-whyareyoukeeping class **”添加到您的 app/proguard-rules.pro(已安装的应用模块)
  2. 将已安装应用的 minifyEnabled 设置为 true
  3. 构建已安装的应用程序,然后 Gradle 控制台将包含有关它保留或不保留哪些类的信息列表
  4. 将该部分复制到某个编辑器,以便您进行编辑
  5. 对于用“保留”或“是一个库”标记的每个类,这将是一个要保留的类,即。 “-keep class some.package.class {*;}” 一种。您还应该能够在成员级别执行此操作以进一步优化
  6. 编译完这些 Keep 的列表后,将它们添加到每个功能的 proguard-rules.pro 中
  7. 您可能需要也可能不需要验证 base/proguard-rules.pro 是否使用“-dontobfuscate”(或以某种方式将混淆图向下游传播到特征)

现在您可以使用 minifyEnabled true 构建您的免安装应用。

请注意第 5 步,编译可能会遇到挑战,具体取决于您的编辑器有多好。工程师演示的一种方法是使用 AWK 命令替换文本: - awk '/^[^ ]/ { cls=$1 } /is (kept|a library)/ { print "-keep class " cls " {*;}" }'

For more detail and update can you check here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-11
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 2018-09-19
    • 1970-01-01
    相关资源
    最近更新 更多