Android 2015年VisualStudio中的Xamarin MultiDex
大家好,我已经死定了 使用VisualStudio 2015、Xamarin和MvvmCross开发PCL应用程序。 Android应用程序超过了65K的限制。我需要使用多重索引 对于其实施,我已执行了以下指南:Android 2015年VisualStudio中的Xamarin MultiDex,android,xamarin,mvvmcross,android-multidex,Android,Xamarin,Mvvmcross,Android Multidex,大家好,我已经死定了 使用VisualStudio 2015、Xamarin和MvvmCross开发PCL应用程序。 Android应用程序超过了65K的限制。我需要使用多重索引 对于其实施,我已执行了以下指南: "java.exe" exited with code 2. C:\Program Files (x86)\MSBuild\Xamarin \Android\Xamarin.Android.Common.targets 1965 <!-- Compile java
"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"
/>
- 启用多索引的复选框
- 扩展多索引应用程序类
"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"
/>
调试模式
明斯克:21
TargetSdk:25
构建工具:23.0.3
Jdk 1.8.0_121
安卓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"
/>
案例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.
这很可能是由Xamarin和ProGuard之间的问题引起的,修复方法已详细说明。本质上,您需要将Android SDK目录中的
proguard.jar
文件替换为(当前版本为v5.3.3)中的最新文件
编辑:根据编辑中的错误消息,编译期间未传递--multi-dex选项。我会检查您的Android.csproj
,确保所有构建配置的
选项都设置为True
。如果这没有帮助,你可能需要上传一个可复制的样本到某处
编辑2:根据注释,您的Android SDK位置需要位于路径不包含空格的位置<代码>程序文件不好。我个人把我的放在
C:\Android\Android sdk
中 在调整android sdk的路径、删除空格并在Droid平台的项目文件中设置所有配置中的属性AndroidEnableMultiDex(显示为AndroidEnableMultipleDex)为true后,我能够无误地编译。此外,我还能够检查生成的dex文件的内容,并且两者都引用了Mvvmcross
当我执行应用程序时,它会显示初始视图(ok!!!),但是,处理具有绑定viewmodel的视图(活动)时会发生异常。现在,viewmodel具有空值。(在必须激活multidex之前,应用程序将在没有任何关联的情况下执行)
我现在面临的挑战是,是否所有对Mvvmcross的引用都应该在主索引中,还是因为我忽略了另一个问题?
提前感谢他抽出时间来@LukePothier
我的自我反应:
编译并生成dex类后:
- 按照Jon Douglas在中的提示使用dex2jar和jd gui工具
- 要非常耐心和坚持
- 如果您可以自己做,请删除InReseary代码和插件
我已经有应用程序运行!!!在这个链接“”中,解释了Xamarin.Android 7.3不再需要更新。然而,在知道这一点之前,已经将Proguard更新到了最新版本。很好的一点是,如果您使用的SDK是从默认位置Xamarin将其与Xamarin放在一起的。Android>=v7.3,您不应该有Proguard问题。如果您尝试将输出详细度设置为Diagnostic进行构建,错误是否会更详细?在所有配置中使用true会出现java错误代码2Using:应为类路径分隔符“;”在参数8中的“\Android\Android sdk\build tools\25.0.3\lib\shrinkedAndroid.jar”之前。。。D:\\createMultidexmaindexClassList您的Android SDK需要位于路径中没有空格的地方。所以
程序文件
是不好的。