Visual Studio 2015中的Xamarin MultiDex

帮手

大家好,我死定了!

使用VisualStudio 2015,Xamarin和MvvmCross开发PCL应用程序。Android应用超出了65K的限制。我需要使用Multidex!

为了实施,我遵循了以下准则

  • MultiDex的已启用复选框
  • 扩展的MultiDexApplication类

一般注意事项

调试模式

MinSdk:21

TargetSdk:25

编译工具:23.0.3

JDK 1.8.0_121

Xamarin.Android 7.3

结果

"java.exe" exited with code 2.  C:\Program Files (x86)\MSBuild\Xamarin    \Android\Xamarin.Android.Common.targets   1965

<!-- Compile java code to dalvik -->
  <CompileToDalvik 
    DxJarPath="$(DxJarPath)"
    JavaToolPath="$(JavaToolPath)"
    JavaMaximumHeapSize="$(JavaMaximumHeapSize)"
    JavaOptions="$(JavaOptions)"
    ClassesOutputDirectory="$(IntermediateOutputPath)android\bin\classes"
    ToolPath="$(DxToolPath)"
    ToolExe="$(DxToolExe)"
    UseDx="$(UseDx)"
    MultiDexEnabled="$(AndroidEnableMultiDex)"
    MultiDexMainDexListFile="$(_AndroidMainDexListFile)"
    JavaLibrariesToCompile="@(_JavaLibrariesToCompileForAppDx)"
OptionalObfuscatedJarFile="$(IntermediateOutputPath)proguard\__proguard_output__.jar"
/>

该错误在编译过程中发生。

我已经咨询了以下来源:

https://developer.android.com/studio/build/multidex.html

http://www.jon-douglas.com/2016/09/05/xamarin-android-multidex/

http://www.jon-douglas.com/2016/09/23/xamarin-android-multidex-keep/

https://przemekraciborski.eu/

https://forums.xamarin.com/discussion/64234/multi-dex-app-with-a-custom-application-class-that-runs-on-pre-lollipop

http://frogermcs.github.io/MultiDex-solution-for-64k-limit-in-Dalvik/

我也有ClassyShark.jar工具,但是没有生成dex或apk文件进行探索。仅存在mono.android.jar文件

在此处输入图片说明

请我帮忙。

非常感谢你。


回答1和Luke Pothier的评论是结果:

设置输出详细程度=诊断


情况1:

使用Android Sdk位置:随Visual Studio 2015安装的C:\ Program Files(x86)\ Android \ android-sdk。

4>_CompileToDalvikWithDx:
4>  Creating directory "obj\Debug\proguard".
4>  C:\Program Files\Java\jdk1.8.0_121\\bin\java.exe -Xmx1G -jar "C:\Program Files (x86)\Android\android-sdk\build-tools\25.0.3\\lib\dx.jar" --no-strict --dex --output= ... 
4>  trouble writing output: Too many field references: 68102; max is 65536.
4>  You may try using --multi-dex option.
4>  References by package:
(list of references by packages)
4>C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1965,3): error MSB6006: "java.exe" exited with code 2.

情况2:

使用Android Sdk位置:c:\ android \ sdk,最新的Proguard版本5.3.3与Android Studio一起安装。

4>_CompileToDalvikWithDx:
4>  Creating directory "obj\Debug\proguard".
4>  C:\Program Files\Java\jdk1.8.0_121\\bin\java.exe -Xmx1G -jar C:\Android\sdk\build-tools\25.0.0\\lib\dx.jar --no-strict --dex --output=
4>  trouble writing output: Too many field references: 68102; max is 65536.
4>  You may try using --multi-dex option.
4>  References by package:
(list of references by packages)
4>C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1965,3): error MSB6006: "java.exe" exited with code 2.
帮手

在调整了android sdk的路径,删除空格并在Droid平台的项目文件中设置了所有配置(显示为AndroidEnableMultipleDex)后的属性AndroidEnableMultiDex为true时,我能够正确编译另外,我已经能够检查生成的dex文件的内容,并且都具有对Mvvmcross的引用

当我执行该应用程序时,它显示了启动视图(确定!),但是,在处理具有绑定的视图模型的视图(活动)时会发生异常。现在,视图模型具有空值。(直到必须激活Multidex的时刻,该应用程序的执行才成功)

我现在的挑战是知道对Mvvmcross的所有引用是否都应该在主dex中,还是由于我忽略的另一个问题?

在此先感谢您对@LukePothier的宝贵时间。

我的自我回应:

编译并生成dex类后:

我已经在运行该应用程序!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章