Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 2015年VisualStudio中的Xamarin MultiDex_Android_Xamarin_Mvvmcross_Android Multidex - Fatal编程技术网

Android 2015年VisualStudio中的Xamarin MultiDex

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

大家好,我已经死定了

使用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 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需要位于路径中没有空格的地方。所以
程序文件
是不好的。