标签: android-multidex

Android gradle插件multidex ZipException

我正在尝试使用新的multidex选项,但是我收到以下错误:

Execution failed for task ':packageAll[Variant]TestClassesForMultiDex'.
> java.util.zip.ZipException: duplicate entry: android/support/multidex/BuildConfig.class
Run Code Online (Sandbox Code Playgroud)

我已经能够发现问题只发生在运行connectedAndroidTests任务时,而不是简单地构建项目(构建)时.

android gradle android-multidex

9
推荐指数
1
解决办法
8232
查看次数

Android MultiDex - 关于内部工作的问题

我最近发现了Android的新MultiDex功能,用于处理超过65,000个引用的应用程序.请参阅:https://developer.android.com/tools/building/multidex.html

有人可以帮我理解以下问题:

1)Gradle构建插件如何确定主要dex文件(classes.dex)与次要dex文件的放置内容?基于该文档,在主要dex中需要某些东西,但它没有给出任何示例.是否所有活动都必须在主要dex文件中?

引用文字:

在Dalvik运行时执行时,主要dex文件中需要哪些类有复杂的要求.Android构建工具更新处理Android需求,但其他包含的库可能还有其他依赖性要求,包括使用内省或从本机代码调用Java方法.在更新multidex构建工具之前,可能无法使用某些库,以允许您指定必须包含在主dex文件中的类.

2)仅针对Android API Level 21(Android L)及更高版本构建时,Gradle Build Plugin中存在不同的行为.它说它更快,因为它"将应用程序的每个模块(包括依赖项)构建为单独的dex文件.这通常被称为预先dexing." Android中模块的定义是什么?这是这里提到的Java库,Android库和Android应用程序模块:http://developer.android.com/sdk/installing/studio-build.html#projectModules?远程或本地二进制依赖项(例如:Jars)是否计为单独的模块,因此可以放入不同的dex文件中,还是根据它们包含在模块中?

android android-build android-activity android-gradle-plugin android-multidex

9
推荐指数
2
解决办法
3080
查看次数

Android 4.4.4上的FlexJson ClassNotFound异常

我有一个针对Android设备的multidex项目.我使用Flexjson.我已经用flexjson 3.3和2.x进行了测试.

它与Android 5.x完美配合,但在Android 4.4.4中崩溃.

看起来Dex支持库与旧的Android版本不合适但我无法分辨.

这是我的堆栈跟踪:

 06-29 03:50:44.763  11884-11884/com.pigdroid.gameboard E/AndroidRuntime? FATAL EXCEPTION: main
    Process: com.pigdroid.gameboard, PID: 11884
    flexjson.JSONException: [ layers.values ]:  Could not load com.pigdroid.game.board.tile.model.IntTileLayer
            at flexjson.ObjectBinder.findClassInMap(ObjectBinder.java:250)
            at flexjson.ObjectBinder.findClassName(ObjectBinder.java:213)
            at flexjson.ObjectBinder.bind(ObjectBinder.java:92)
            at flexjson.ObjectBinder.bindIntoCollection(ObjectBinder.java:110)
            at flexjson.factories.ListObjectFactory.instantiate(ListObjectFactory.java:13)
            at flexjson.ObjectBinder.bind(ObjectBinder.java:95)
            at flexjson.ObjectBinder.bindIntoObject(ObjectBinder.java:149)
            at flexjson.factories.ExistingObjectFactory.instantiate(ExistingObjectFactory.java:25)
            at flexjson.ObjectBinder.bind(ObjectBinder.java:95)
            at flexjson.ObjectBinder.bind(ObjectBinder.java:74)
            at flexjson.JSONDeserializer.deserialize(JSONDeserializer.java:241)
            at flexjson.JSONDeserializer.deserializeInto(JSONDeserializer.java:301)
            at com.pigdroid.game.model.memento.UndoableObject.from(UndoableObject.java:35)
            at com.pigdroid.game.controller.GameController.loadModelFromSerialized(GameController.java:108)
            at com.pigdroid.gameboard.view.detail.game.tile.TileBoardGameFragmentController.setGame(TileBoardGameFragmentController.java:692)
            at com.pigdroid.gameboard.view.detail.game.GameDetailFragment.onKickOff(GameDetailFragment.java:168)
            at com.pigdroid.gameboard.view.ServiceFragment.kickOffIf(ServiceFragment.java:71)
            at com.pigdroid.gameboard.view.detail.game.GameDetailFragment.kickOffIf(GameDetailFragment.java:159)
            at com.pigdroid.gameboard.view.ServiceFragment$3.bound(ServiceFragment.java:52)
            at com.pigdroid.gameboard.view.ServiceFragment$3.bound(ServiceFragment.java:48)
            at com.pigdroid.android.hateaidl.HateAIDLConnection$3.onServiceConnected(HateAIDLConnection.java:118)
            at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1101)
            at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1118)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001) …
Run Code Online (Sandbox Code Playgroud)

android json deserialization flexjson android-multidex

9
推荐指数
1
解决办法
478
查看次数

带有multidex的Xamarin Android - 调试模式下的bug

我创建了Xamarin Forms应用程序.我使用Android的multidex(许多库).我使用带有MultiDexMainDexList选项的multidex.keep文件.现在部署工作.但是我在调​​试模式下遇到异常:

 System.ArgumentException: The offset and length have exceeded the bounds of the array or the counter value exceeds the number of elements from the pointer to the end of the original collection.
 ? System.Buffer.BlockCopy(Array src, Int32 srcOffset, Array dst, Int32 dstOffset, Int32 count)
 ? Mono.Cecil.Metadata.GuidHeap.Read(UInt32 index)
 ? Mono.Cecil.MetadataReader.InitializeCustomDebugInformations()
 ? Mono.Cecil.MetadataReader.GetCustomDebugInformation(ICustomDebugInformationProvider provider)
? Mono.Cecil.Cil.PortablePdbReader.Read(MethodDefinition method)
? Mono.Cecil.Cil.CodeReader.ReadMethodBody()
? Mono.Cecil.Cil.CodeReader.ReadMethodBody(MethodDefinition method)
? Mono.Cecil.MethodDefinition.<>c.<get_Body>b__41_0(MethodDefinition method, MetadataReader reader)
? Mono.Cecil.ModuleDefinition.Read[TItem,TRet](TRet& variable, TItem item, Func`3 read)
? Mono.Cecil.MethodDefinition.get_Body()
 Mono.Cecil.MethodDefinition.get_DebugInformation()
? Mono.Debugging.Soft.SoftDebuggerSession.LoadPdbType(TypeDefinition type, Dictionary`2 fileToSourceFileInfos) …
Run Code Online (Sandbox Code Playgroud)

android xamarin.android dex xamarin.forms android-multidex

9
推荐指数
1
解决办法
232
查看次数

找不到multidex.jar(com.android.support:multidex:1.0.2)

找不到multidex.jar(com.android.support:multidex:1.0.2).在以下位置搜索:https: //jcenter.bintray.com/com/android/support/multidex/1.0.2/multidex

我刚刚安装了最新版本的Android Studio 3.1.3当我尝试同步我的项目时,显示无法解决:multidex

此外,我尝试https://jcenter.bintray.com/com/android/support/multidex/1.0.2/multidex此链接显示404错误.请帮忙

项目等级:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
apply from: 'buildsystem/dependencies.gradle'

buildscript {
    repositories {
        jcenter()
        mavenCentral()
        maven { url 'https://maven.fabric.io/public' }
        maven {
            url 'https://maven.google.com'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.frogermcs.androiddevmetrics:androiddevmetrics-plugin:0.5'
        classpath 'com.google.gms:google-services:3.1.2'
        classpath 'io.fabric.tools:gradle:1.25.1'
    }
}

allprojects {
    ext {
        androidApplicationId = 'com.medikoe.connect'
        androidVersionCode = 23
        androidVersionName = "1.7.2"
        testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
        testApplicationId = 'com.medikoe.test'
    }
}

task clean(type: …
Run Code Online (Sandbox Code Playgroud)

android android-studio android-multidex

9
推荐指数
1
解决办法
1万
查看次数

E/LoadedApk:无法仅在 Android Q (API 29) 上实例化 appComponentFactory

我已经到处搜索了这个问题,但仍然没有解决方案。

gradle 有 minSdkVersion 21 和 targetSdkVersion 29

我只在 API 29 中遇到错误,然后应用程序无法加载并显示空白屏幕。当我看到 logcat 它给出了这样的错误:

E/LoadedApk: Unable to instantiate appComponentFactory
java.lang.ClassNotFoundException: Didn't find class "androidx.core.app.CoreComponentFactory" on path: DexPathList[[],nativeLibraryDirectories=[/data/app/com.packagename.appname-BxS7Zs-h0IWwJAVhbjx7aQ==/lib/x86, /data/app/com.packagename.appname-BxS7Zs-h0IWwJAVhbjx7aQ==/base.apk!/lib/x86, /system/lib, /system/product/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at android.app.LoadedApk.createAppFactory(LoadedApk.java:256)
    at android.app.LoadedApk.updateApplicationInfo(LoadedApk.java:370)
    at android.app.ActivityThread.handleDispatchPackageBroadcast(ActivityThread.java:5951)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1941)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:214)
    at com.android.server.SystemServer.run(SystemServer.java:541)
    at com.android.server.SystemServer.main(SystemServer.java:349)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:908)
Run Code Online (Sandbox Code Playgroud)

我认为它似乎来自 multidex,然后我尝试将以下代码添加到 gradle app

multiDexKeepFile 文件('multidex-config.txt')

multiDexKeepProguard 文件('multidex-config.pro')

我的 multidex-config.txt

com/packagename/appname/androidx.class
Run Code Online (Sandbox Code Playgroud)

我的 multidex-config.pro

-keep class androidx.core.app.CoreComponentFactory { *; }
Run Code Online (Sandbox Code Playgroud)

我的 App …

android gradle android-studio android-multidex

9
推荐指数
1
解决办法
1万
查看次数

在Android中启用MultiDex支持以在Eclipse中实现65K +方法

我试图在eclipse中构建Multidex apk,但无法成功.

我尝试了以下步骤,在Android应用程序中配置Multidex支持:

  1. 我已将位于/ extras/android/support/multidex /的Multidex库添加到我的项目中.
  2. 由于我的应用程序有自定义应用程序类,我已将android.support.multidex.MultiDexApplication类扩展到我的应用程序.

我仍然无法建立apk.

Android开发人员 也没有任何关于在eclipse中构建Multidex apk的文档,它只有gradle和Android Studio的文档.

eclipse ant android gradle android-multidex

8
推荐指数
1
解决办法
9463
查看次数

Android Espresso multidex失败

我们在我们的应用程序中使用multidex很长一段时间但最近使用最新更新它在android API <19上失败,例如带有api 16的模拟器它是标准的java.lang.NoClassDefFoundError.

如果我为缺少的类定义multidexKeepProguard,例如java.lang.NoClassDefFoundError.rx.plugins.RxJavaHooks异常

-keep class rx.plugins.**{*;}
Run Code Online (Sandbox Code Playgroud)

然后它会在不同的地方失败,原因与NoClassDefFound相同

这是跑步者,应用程序和清单设置:

https://gist.github.com/originx/1890599b57b0ee3e14a85a4732301cd9

logcat的:

https://gist.github.com/originx/887f80d405334f1903b3024eb5cd1024

建立环境设置:

Android Studio 2.2.2 Build#AI-145.3360264,建于2016年10月18日JRE:1.8.0_112-release-b05 x86_64 JVM:JetJrains sro的OpenJDK 64位服务器VM

编译选项

compile 'com.android.support:multidex:1.0.1'
Run Code Online (Sandbox Code Playgroud)

构建工具信息:

   classpath 'com.android.tools.build:gradle:2.2.2'
   compileSdkVersion 25
   buildToolsVersion '25'


   defaultConfig {
        applicationId "app.packagename.com"

         minSdkVersion 16
        targetSdkVersion 25

        testInstrumentationRunner "de.payback.app.CustomAndroidJUnitRunner"
        multiDexEnabled true
    }

 dexOptions {
        jumboMode true
        preDexLibraries false
        javaMaxHeapSize "4g"
        maxProcessCount = 8
    }

  debug {
            applicationIdSuffix '.debug'
            versionNameSuffix '-debug'
            signingConfig signingConfigs.debug
            minifyEnabled false
            shrinkResources debugShrinkResourcesEnabled
            proguardFiles getDefaultProguardFile('proguard-android.txt'), '../proguardRules/proguard-rules.pro', '../proguardRules/proguard-debug-rules.pro'
          //  multiDexKeepProguard file('../proguardRules/multidex-proguard.pro')
            testProguardFiles getDefaultProguardFile('proguard-android.txt'), …
Run Code Online (Sandbox Code Playgroud)

android android-espresso android-multidex

8
推荐指数
1
解决办法
927
查看次数

multidex - NoClassDefFoundError 启用了 multidex

我的应用程序在 21 之前崩溃并java.lang.NoClassDefFoundError app.module.SomeClass出现错误。

我已经启用了 Multidex:

构建.gradle:

android {
    defaultConfig {
        ...
        multiDexEnabled true
    }
}

dependencies {
   ...
   implementation "androidx.multidex:multidex:2.0.1"
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序类:

class App : DaggerApplication() {
    ...
    override fun attachBaseContext(base: Context) {
        super.attachBaseContext(base)
        MultiDex.install(this)
    }
Run Code Online (Sandbox Code Playgroud)

在阅读了主 DEX 文件中所需的声明类之后,我创建了multidex-config.pro文件以包含app.module.**在主 DEX 文件中:

-keep class app.module.** { *; }
Run Code Online (Sandbox Code Playgroud)

并在 build.gradle 中注册:

android {
  buildTypes {
    debug {
      ...
      multiDexKeepProguard file('multidex-config.pro')
    }
}
Run Code Online (Sandbox Code Playgroud)

我通过检查build/intermediates/legacy_multidex_main_dex_list/debug/mainDexList.txt和分析调试 apk(检查是否classes.dex包含app.module.SomeClass)来确认它。

但我仍然收到java.lang.NoClassDefFoundError …

android kotlin android-multidex

8
推荐指数
2
解决办法
2863
查看次数

Androidx MutliDex:.dex 文件中的方法引用数不能超过 64K

0.57 => 0.59迁移应用程序后,我需要修复第三方软件包的一些问题,现在我面临着 dex 问题。

构建.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext {
        buildToolsVersion = "28.0.3"
        minSdkVersion = 16
        compileSdkVersion = 28
        targetSdkVersion = 28

        // supportLibVersion = "28.0.0"
        // supportVersion = "28.0.0"
        // googlePlayServicesVersion = "15.0.1"
        // facebookSdkVersion = "4.37.0"
    }
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath 'com.google.gms:google-services:4.3.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the …
Run Code Online (Sandbox Code Playgroud)

android android-multidex react-native

8
推荐指数
1
解决办法
9187
查看次数