仅发布模式 APK 构建的 Flutter 问题

2023-11-25

当从已安装的 APK 运行该应用程序时,我遇到了问题,但当直接从 Android studio 运行该应用程序时,该应用程序运行良好。在物理设备和模拟器上进行了测试,并且还使用构建模式调试、配置文件和发布(其中发布和配置文件模式当然仅适用于物理设备)

概括: a) 共享首选项、路径提供程序和权限处理程序生成MissingPluginException。 b) Android 后退按钮不起作用。

这些可能是单独的问题,但我强烈怀疑它们是相关的,因为只有当应用程序从不是直接从 Android Studio 安装的 APK 启动时才会发生。

需要非常明确的是,如果我从 Android Studio 中“安装”应用程序,即使没有连接 AS,我也可以继续使用该应用程序。但是,当我构建 APK、手动安装它并尝试运行该应用程序时,我会遇到由上述错误引起的各种症状。如果我随后通过 Android Studio 连接 Logcat,问题将持续存在,直到我使用 AS 安装新版本。

更多细节:

  1. 在发布模式的 APK 构建过程中,gradle 抱怨缺少“libs.jar”文件,例如:
Execution failed for task ':app:lintVitalQaRelease'.                    
> Could not resolve all artifacts for configuration ':app:devProfileRuntimeClasspath'.
   > Failed to transform libs.jar to match attributes {artifactType=processed-jar, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime}.
      > Execution failed for JetifyTransform: /home/johan/AndroidStudioProjects/teacher_app/build/app/intermediates/flutter/devProfile/libs.jar.
         > Transform's input file does not exist: /home/johan/AndroidStudioProjects/teacher_app/build/app/intermediates/flutter/devProfile/libs.jar. (See https://issuetracker.google.com/issues/158753935)

搜索上述问题的解决方案会出现几个记录在案的案例,但它们通常没有风味,因此:app:lintVitalRelease代替:app:lintVitalQaRelease正如我所得到的。此外,错误将显示缺少的中间体为.../flutter/Profile/libs.jar在报道的情况下,同样没有口味。

就我而言,额外的Qa and dev分别是两种不同的口味。在其他情况下,解决方法是“构建调试和配置文件模式 apk 来解决问题”,在我的情况下,解决方法是“构建调试和配置文件并为所有其他版本发布 APK,而不仅仅是您正在尝试的版本”来建造”。

因此,我在尝试构建风味“Qa”模式“发布”和它抱怨的任何一种之间切换,一遍又一遍,直到它满意并生成 APK。必须构建一堆不相关的风格和模式很烦人,但至少这是一个让我获得 APK 的解决方法。

此后,我可以安装和取消 APK,但出现问题。 logcat 显示发生了一些 MissingPlugin 异常:

MissingPluginException(No implementation found for method getApplicationDocumentsDirectory on channel plugins.flutter.io/path_provider)

and....

MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)

最后: 在调查这一切时,我尝试了来自的权限处理程序示例https://pub.dev/packages/permission_handler/example。我刚刚将其作为新的“页面”添加到我的应用程序中。导航到此页面时,我遇到另一个异常:

MissingPluginException(No implementation found for method checkPermissionStatus on channel flutter.baseflow.com/permissions/methods)

应用程序中与这些插件相关的许多功能都无法正常工作 - 照片不显示,用户需要在每次重新启动时进行身份验证,等等。这些显然依赖于上述插件。

我尝试将 WRITE_EXTERNAL_STORAGE 添加到 AndroidManifest 中,甚至将其添加到每种风格的单独清单中。 (我通常只将共享配置添加到主 AndroidManifest.xml 中)

我已经实现了发布模式签名,以防 Android 不喜欢向未签名的 APK 授予权限。

编辑: 为了消除导致问题的应用程序 ID,我已将所有实例更改回创建项目时使用的原始包名称。这意味着我的设备上一次只能安装一种风格。然而,这没有任何区别。


显然我已经做过很多次 flutter-clean 和 flutter-get 了,每次都迫使我一一经历构建所有缺失的中间体的过程。

另一件事... Android 的后退按钮不起作用。如果我直接从 Android Studio 运行应用程序,它可以正常工作,但如果仅从 APK 运行它,则不起作用(似乎被忽略)。

我对此无计可施。

编辑#2:进展!
我创建了一个新项目并复制了源代码(lib/*)。我还复制了 pubspec.yaml 和资产。我没有对 build.gradle 文件进行任何更改,只对主 AndroidManifest.xml 进行了两处更改 - 应用程序名称并添加了 Internet 权限。

我还设置了应用程序图标。

复制源代码是一项艰巨的工作——有很多很多导入,但最终结果是一个有效的构建。

SharedPrefs 在重启后仍然存在 显示下载的图像 Android后退按钮工作原理 设备存储权限显示为已授予 首次从应用程序内打开相机时会请求许可。 该应用程序可以将用户发送到 Android 应用程序设置屏幕。

一切似乎都有效。我可能在某个地方犯了一个错误,因为新应用程序在主屏幕上显示了正确的应用程序图标,但在应用程序的 Android 设置页面中显示了 Flutter 默认图标。

接下来的步骤是对 APK 进行签名,然后重新引入风格,即使只是能够设置 dart 目标,但也希望能够设置其他属性。


我遇到了这个问题。我用几种不同的方法解决了这个问题:

  1. 将 proguard-rules.pro 添加到 android/app/proguard-rules.pro
#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
-keep class androidx.lifecycle.** { *; } #https://github.com/flutter/flutter/issues/58479
#https://medium.com/@swav.kulinski/flutter-and-android-obfuscation-8768ac544421
  1. 将 proguard 添加到应用程序级别 build.gradle 中的 buildTypes
buildTypes {
    release {
        profile {
            matchingFallbacks = ['debug', 'release']
        }
    minifyEnabled true
    useProguard true
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    signingConfig signingConfigs.release
    }
}
lintOptions {
    disable 'InvalidPackage'
    checkReleaseBuilds false
}
  1. 您还可以尝试在终端中运行主通道:
flutter channel master
  1. 我还通过导航到 SDK 管理器 -> SDK 工具 -> 检查和下载 Google Play 服务,将 android 迁移到了 Android Studio 中的 AndroidX

  2. 我还确保编译SDK和目标SDK是29;目前,SDK 30 的permission_handler 包存在问题。

  3. 我还编辑了 kotlin 主要活动文件:

package yourpackage
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterActivity() {
    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅发布模式 APK 构建的 Flutter 问题 的相关文章

  • 如何在应用程序关闭时在 Android 通知中显示操作按钮?

    我有一个安卓应用程序 对于通知 我们必须显示一些操作按钮 当应用程序打开时 我们可以自由地构建通知并显示操作按钮 但是当应用程序关闭时 通知会在 Android 的通知托盘中收到 应用程序开发人员无法控制构建用户界面和操作按钮 我们现在如何
  • 如何通过我的活动在 Android 中设置铃声?

    我正在尝试找到一种方法来通过 Android 活动中的代码设置新的默认铃声 我已经将铃声下载到bytearray 最后 我设法将默认铃声设置为我下载的铃声 下面不包含下载代码 仅包含将其设置为默认铃声所需的代码 File k new Fil
  • Ionic 2 RC0 和 Angular 2 最新的 Android 构建错误(ngc:错误:静态解析符号值时遇到错误)

    当我使用构建android时出现错误ionic build android命令 ngc 错误 静态解析符号值时遇到错误 引用本地 非导出 符号 字典 考虑导出符号 原始 ts文件中的位置14 8 解析符号TRANSLATION PROVID
  • 如何禁用操作栏上“向上”按钮的翻转?

    背景 我做了一个 应用程序管理器 https play google com store apps details id com lb app manager 替代应用程序 我希望添加 RTL 从右到左 语言的翻译 因为我知道在某些 And
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • MIUI 权限被拒绝活动 KeyguardLocked

    当应用程序处于后台且屏幕被锁定时 我无法启动活动 没有异常或警告 只是不调用 onCreate 我一直在与这个问题作斗争 我想我终于找到了它的根源 日志中有一行 D com android server am ExtraActivityMa
  • 必须提供一个函数体。尝试添加函数体

    我自己写的 因为statefulwidget没有自动创建模式 并且在 7 个不同的错误中我无法修复这个问题 import package flutter material dart class NaberMain extends State
  • 如何为我的 Android Market APK 创建证书?

    我想将我的第一个 APK 应用程序上传到 Android Market 但我收到了此错误 顺便说一下 在 stackoverflow 中搜索时并没有引导我找到正确的链接 市场不接受使用调试证书签名的 APK 创建有效期至少 50 年的新证书
  • Android 中的 OpenGL 缩小

    我正在使用 3D 对象并渲染它并通过扩展 GLSurfaceView 实现渲染器来显示它 问题是如何通过捏合和捏合进行缩小 下面是我的班级 package com example objLoader import java nio Byte
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • 安卓。 CalendarView...一次仅显示一个月的日历

    我正在使用 CalendarView 其中我想一次仅查看一个月的日历并滚动查看下个月 但 CalendarView 一次显示所有月份 下面是我的代码
  • 无法使用 findViewById() 找到视图

    我找不到TextView通过致电findViewById 即使 ID 确实存在 OtherActivity public class OtherActivity extends Activity Override protected voi
  • FirebaseAnimatedList 实时更改内容

    我想知道如何使用新查询 更改路径的新内容来重建 FirebaseAnimatedList new Flexible child new FirebaseAnimatedList query query sort DataSnapshot a
  • 哪个视图最亮?

    在Android中 哪个是轻量级视图 例如 View Textview Edittext 等 在某些情况下 我们需要使用视图来填充区域而不向用户显示视图 同时屏幕加载速度应该很快 您可以使用空间 android widget Space S
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • jetpack compose 是否使用drawable-night 文件夹?

    我们有一个基于视图的 Android 应用程序 其中有一些可绘制对象res drawable文件夹 以及夜间模式的对应文件夹res drawable night folder 使用旧视图时 引用可绘制对象R drawable foo从 XM
  • 如何在android中通过蓝牙向配对设备发送短信?

    在我的应用程序中 我想通过蓝牙发送和接收短信 我可以在列表视图中看到配对设备名称和地址的列表 但是当我尝试向配对设备发送文本时 什么也没有发生 在其他设备中没有收到文本 这是我向配对设备发送消息的代码 private void sendDa
  • Android 标记如何实现拖放?

    你好 我正在 Android 中开发 MapView 应用程序 我有三个标记 我希望稍后能够使用 Google Map API getlocation function 为了尝试一下 我想使用拖放功能移动标记 然后检查位置 任何人都可以通过
  • fs-extra:源和目标不能相同。 (科尔多瓦)

    我在使用 cordova 构建时遇到错误 Error Source and destination must not be the same 构建系统 Ionic ionic cli 4 10 1 ionic framework ionic
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try

随机推荐

  • QuickCheckAll 始终返回“True”

    我正在尝试使用 QuickCheck 以下另一个答案 我这样测试 LANGUAGE TemplateHaskell import Test QuickCheck import Test QuickCheck All last a gt a
  • 继承模板方法

    我有一个类似于以下内容的课程 class SomeClass public template
  • bigmemory 和朋友的文件备份示例

    我有兴趣探索 R 如何处理内存不足的数据 我找到了bigmemory包裹和朋友 bigtabulate and biganalytics 但希望有人能给我指出一个使用这些包的文件支持的示例 任何其他内存不足的提示也将不胜感激 查理 只需发送
  • 在 R 中读取巨大的 json 文件,出现问题

    我正在尝试使用 R 读取非常大的 json 文件 并且我正在将 RJSON 库与此推荐一起使用json data lt fromJSON paste readLines myfile json collapse 问题是我收到此错误消息 Er
  • 编辑替代方案

    我有一大堆查询并使用levenshtein来计算拼写错误 现在levenshtein导致mysql占用完整的CPU时间 我的查询是 UNION 语句中的全文搜索 levenshtein sql1 是我当前的查询 sql2 只是全文搜索 速度
  • 如何将 flash (.swf) 文件嵌入到 asp.net 中?

    如何将 flash swf 文件显示到 asp net 中 从 YouTube 得到这个
  • Windows 8 的 WebClient 替代方案?

    I use WebClient获取 Windows Phone 8 和 Android 的 Yahoo 数据 HttpClient 使用 WebClient 我可以做 WebClient client new WebClient clien
  • 如何更新/重命名载波上传的文件?

    我不知道如何更新 重命名在 Rails 3 2 6 中使用 Carrierwave mongoid 上传 管理的文件 我想重命名数据库和文件系统中的文件 类似这样的事情也许 def rename id new name f Uploaded
  • 如何通过 NSArrayController 获得模型更改的通知?

    我有一个NSView绑定到的子类arrangedObjects of an NSArrayController 当数组插入或删除项目时 视图会收到通知 如果数组中存储的模型的属性发生更改 如何通知它 我是否需要将我的视图作为观察者添加到添加
  • 如何将nii格式文件转换为2D图像

    我有一个扩展名为 nii 的文件 我不知道如何将 nii 文件转换为 2D 格式 我的问题是在将 nii 文件转换为 2D 时 我是否会丢失有关该文件的一些信息 哪种格式好 dicom 或 png 或 bmp nii load nii im
  • Windows Phone 8 触摸支持

    Windows Phone 8 是否完全支持默认浏览器中的触摸事件 它是否可以开箱即用 以便网页可以检测到任意触摸移动事件 我遇到了一些浏览器的问题 这些浏览器劫持 touchmove 事件以作为滑动手势用于其界面 Windows Phon
  • 如何清除缓存的 UITableViewCell

    有人对如何清除缓存有建议吗UITableViewCell 我想使用reuseIdentifier 缓存这些单元格 但是 有时我需要删除或修改某些表行 我期望打电话reloadData行更改后 现在 dequeueReusableCellWi
  • 在表中插入数据之前是否可以获取 Id (IDENTITY) 的新值?

    在表中插入数据之前是否可以获取 Id IDENTITY 的新值 可以写这样的东西 INSERT INTO Table1 SELECT GET NEW IDENTITY Field1 Field2 FROM Table2 我需要 Id 的值
  • 在TreeSet中,基于不同属性的自定义对象的排序和唯一性

    下面是我的学生班级 class Student implements Comparable String name int rollNo Override public int compareTo Object obj return Stu
  • 对一对有符号数和无符号数进行算术运算合法吗?

    我已经学习汇编了一半以上 并且熟悉有符号和无符号整数如何以位表示的概念 我知道这可能看起来是一个奇怪的问题 其答案是非常明显的 但我 我想知道使用像加法这样的算术运算对于一对数字是否有意义 其中一个被认为是有符号的 另一个被认为是无符号的
  • 在 PHP 中增加日期的最简单方法?

    假设我有一根绳子进来 2007 02 28 我可以编写将其变成的最简单的代码是什么 2007 03 01 现在我只是使用strtotime 然后添加24 60 60 然后使用date 但只是想知道是否有更干净 更简单或更聪明的方法来做到这一
  • 为什么 setup.py 中的依赖链接被弃用?

    有相当多的人想知道依赖链接的替代方案setup py 使用 pip 标志激活 process dependency links 将 process dependency links 与 pip 一起使用的替代方法是什么 依赖setup py
  • QGraphicsItem::boundingRect() 应该包含子边界矩形吗?

    谷歌搜索建议应该 但是拖放机器人示例实现 在父机器人对象上 建议不要 QRectF Robot boundingRect const return QRectF 哪一个是正确的 还是有更微妙的事情发生 子项目直接由场景绘制 而不是由父项目绘
  • Android Espresso:使用 pressBack 正确测试关闭应用程序

    我正在尝试用浓缩咖啡实现一些导航测试 实际上 我想在重新启动后检查应用程序是否已通过使用主屏幕上的后退键关闭 这是我正在使用的一段代码 class NavigationTests get Rule val mActivityTestRule
  • 仅发布模式 APK 构建的 Flutter 问题

    当从已安装的 APK 运行该应用程序时 我遇到了问题 但当直接从 Android studio 运行该应用程序时 该应用程序运行良好 在物理设备和模拟器上进行了测试 并且还使用构建模式调试 配置文件和发布 其中发布和配置文件模式当然仅适用于