首页 > 其他分享 >App requires Multidex support Multidex support is required for your android app to build since the n

App requires Multidex support Multidex support is required for your android app to build since the n

时间:2024-02-01 09:55:20浏览次数:29  
标签:dex App app MultiDex flutter Multidex android support

flutter android 报错 64k

!] App requires Multidex support Multidex support is required for your android app to build since the number of methods has exceeded 64k. See https://docs.flutter.dev/deployment/android#enabling-multidex-support for more information. You may pass the --no-multidex flag to skip Flutter's multidex support to use a manual solution. Flutter tool can add multidex support. The following file will be added by flutter: android/app/src/main/java/io/flutter/app/FlutterMultiDexApplication.java

主要是 App 启动 MultiDex 主要是为了解决 “65535 方法数超标

  • 当 App 的功能越来越丰富、使用的库越来越多时,其包含的 Java 方法总数也越来越多,这时候就会出现 65535 问题。
  • 在构建 apk 的时候限制了一个 dex 文件能包含的方法数,其总数不能超过 65535(则 64K,1K = 2^10 = 1024 , 64 * 1024 = 65535)。
  • MultiDex, 顾名思义,是指多 dex 实现,大多数 App,解压其 apk 后,一般只有一个 classes.dex 文件,
  • 采用 MultiDex 的 App 解压后可以看到有 classes.dex,classes2.dex,… classes(N).dex,这样每个 dex 都可以最大承载 64k 个方法,很大限度地缓解了单 dex 方法数限制。

LinearAlloc 问题

  • 现在这个问题已经不常见了,它多发生在 2.x 版本的设备上,安装时会提示 INSTALL_FAILED_DEXOPT。
  • 这个问题发生在安装期间,在使用 Dalvik 虚拟机的设备上安装 APK 时,会通过 DexOpt 工具将 Dex 文件优化为 odex 文件,
  • 即 Optimized Dex,这样可以提高执行效率 (不同的设备需要不同的 odex 格式,所以这个过程只能安装 apk 后进行)。
  • LinearAlloc 是一个固定大小的缓冲区,dexopt 使用 LinearAlloc 来存储应用的方法信息,在 Android 的不同版本中有 4M/5M/8M/16M 等不同大小,
  • 目前主流 4.x 系统上都已到 8MB 或 16MB,但是在 Gingerbread 或以下系统(2.2 和 2.3)LinearAlloc 分配空间只有 5M 大小的。
  • 当应用的方法信息过多导致超出缓冲区大小时,会造成 dexopt 崩溃,造成 INSTALL_FAILED_DEXOPT 错误。

处理办法

  • 启用 MultiDex 解决问题
android {
    namespace "com.example.flutter_tv"
    compileSdkVersion flutter.compileSdkVersion
    ndkVersion flutter.ndkVersion

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.example.flutter_tv"
        // You can update the following values to match your application needs.
        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
        minSdkVersion flutter.minSdkVersion
        targetSdkVersion flutter.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName

        multiDexEnabled true // // Enable MultiDex.
    }

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
        }
    }
}

在代码里启动 MultiDex

  • 使用 MultiDexApplication。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxx">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>
  • Application#attachBaseContext(Context)
public class MyApplication extends Application {
	protected void attachBaseContext(Context base) {
		super.attachBaseContext(base);
		MultiDex.install(this); // Enable MultiDex.
	}
}
NoClassDefFoundError
  • 如果你在调用 MultiDex#install(Context) 做了别的工作,而这些工作需要用到的类却存在于别的 dex 文件里面(Secondary Dexes),就会出现类找不到的运行时异常。
  • 正确的做法是把这些需要用到的类标记在 multidex.keep 清单文件里面,再在 build.gradle 里面启用该清单文件。
android {

  defaultConfig {
    multiDexEnabled true
    multiDexKeepProguard file('multidex.pro')
   }
}

dependencies {
  compile'com.android.support:multidex:1.0.1'
}

标签:dex,App,app,MultiDex,flutter,Multidex,android,support
From: https://www.cnblogs.com/guanchaoguo/p/18000599

相关文章

  • CF1916E Happy Life in University
    关于我赛时线段树忘了开四倍空间导致白吃了一发罚时这档逝原题传送门约定\(x\)子树内的叶子称为\(x\)的叶子。与\(x\)颜色相同的点称为\(x\)的同色点或\(x\)色点。所有在\(x\)子树内的、到\(x\)的路径上(两端不含)没有\(x\)的同色点的\(x\)的同色点称为\(x\)......
  • Applescript成功实现imessage数据筛选,imessage蓝号检测,无痕检测手机号是否注册imess
    一、imessages数据检测的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2.编写苹果MacO......
  • 实测可用的mac app签名+公证教程
    转载来自:https://juejin.cn/post/7296286286155300883?from=search-suggest签名 codesign-f-oruntime-s"证书名称,去钥匙串copy"-v./build/bin/求职助手.app--deep#例子codesign-f-oruntime-s"DeveloperIDApplication:siqitaoi(Z6VUTYSX)"-v./bu......
  • android setprop getprop, 调整app heap 堆 大小
    网上的截图: 通过setprop设置的更改的属性,重启之后就会消失。 调整app堆大小。      一些基本的了解。  ......
  • IOS自动化测试框架appium
    由于公司的产品坐落于不同的平台,如ios、mac、Android、windows、web。因此每次有新需求的时候,开发结束后,留给测试的时间也不多。此外,一些新的功能实现,偶尔会影响其他的模块功能正常的使用。网上的ios自动化方面的内容也是少之又少。由于本人对ios自动化初次接触,花了两天......
  • 手机股票交割单模拟器APP开发技术分享-24软件网
    在现代金融市场中,股票交易已经成为了一种重要的投资方式。然而,对于许多初入股市的投资者来说,理解和掌握股票交易的各种细节可能会感到困难。为了帮助这些投资者更好地理解股票交易,一款名为“手机股票持仓交割单模拟器”的APP应运而生。下面,我们将对这款APP的源码进行一些基本的解......
  • 如何在vue3项目app.ts中获取第三方跳转过来的token 提前处理携带token情况的初始化 两
    如何在vue3项目app.ts中获取第三方跳转过来的token提前处理携带token情况的初始化两种方式路由守卫和window.location在Vue3项目的app.ts文件中获取第三方跳转过来的token,你可以使用VueRouter的route对象来获取URL参数。假设你的token参数位于URL的查询字......
  • CSAPP学习笔记——chapter5 优化程序性能
    编写高效程序需要做到以下几点:第一,我们必须选择一组适当的算法和数据结构第二,我们必须编写出编译器能够有效优化以转换成高效可执行代码的源代码。对于这第二点,理解优化编译器的能力和局限性是很重要的。编写程序方式中看上去只是一点小小的变动,都会引起编译器优化方式很大的变化......
  • 记录--Uni-app接入腾讯人脸核身
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助人脸核身功能有多种接入方式,其中包含微信H5、微信小程序、APP、独立H5、PC端、API接入6种方式。​我们的产品是使用uni-app来开发,所以第一时间考虑使用H5方式接入,但是通过与官方技术人员对接后得知,uni-app是有原生......
  • 招工招聘软件APP开发:开启人力资源新时代
    随着移动互联网的普及,人们越来越依赖于手机应用程序来解决生活中的各种问题。其中,招工招聘软件APP作为一种专门为求职者和雇主提供信息交流的平台,正逐渐成为人力资源领域的新宠。本文将探讨招工招聘软件APP开发的重要性和趋势。一、招工招聘软件APP开发的重要性方便快捷的求职方式......