为啥我的 Xamarin.Android 项目不能在启用 Proguard 的情况下构建:“java.exe”退出代码 1

Posted

技术标签:

【中文标题】为啥我的 Xamarin.Android 项目不能在启用 Proguard 的情况下构建:“java.exe”退出代码 1【英文标题】:Why won't my Xamarin.Android project build with Proguard enabled: "java.exe" exited with code 1为什么我的 Xamarin.Android 项目不能在启用 Proguard 的情况下构建:“java.exe”退出代码 1 【发布时间】:2016-08-27 16:44:29 【问题描述】:

我想在我的项目中使用 Proguard,但是当我尝试构建时收到 java.exe 错误。

"java.exe" exited with code 1.  

我已尝试增加堆大小并创建proguard.cfg file as outlined here,,但没有成功。

我可以在关闭 Proguard 时构建项目,所以我确信这是问题所在。

有什么帮助吗?

编辑:添加看起来相关的输出。我看到一个异常和许多警告,但我不确定如何着手解决这些问题。

5>Using "Proguard" task from assembly "C:\Program Files (x86)\MSBuild\Xamarin\android\Xamarin.Android.Build.Tasks.dll".
5>Task "Proguard" (TaskId:297)
5>  Task Parameter:ProguardJarPath=C:\Users\owner\AppData\Local\Android\android-sdk\tools\proguard\lib\proguard.jar (TaskId:297)
5>  Task Parameter:JavaToolPath=C:\Program Files (x86)\Java\jdk1.7.0_71\\bin (TaskId:297)
5>  Task Parameter:JavaPlatformJarPath=C:\Users\owner\AppData\Local\Android\android-sdk\platforms\android-23\android.jar (TaskId:297)
5>  Task Parameter:MonoPlatformJarPath=C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v6.0\mono.android.jar (TaskId:297)
5>  Task Parameter:ClassesOutputDirectory=obj\Release\android\bin\classes (TaskId:297)
5>  Task Parameter:ProguardCommonXamarinConfiguration=obj\Release\proguard\proguard_xamarin.cfg (TaskId:297)
5>  Task Parameter:ProguardGeneratedReferenceConfiguration=obj\Release\proguard\proguard_project_references.cfg (TaskId:297)
5>  Task Parameter:ProguardGeneratedApplicationConfiguration=obj\Release\proguard\proguard_project_primary.cfg (TaskId:297)
5>  Task Parameter:ProguardConfigurationFiles=
5>          sdk.dirtools\proguard\proguard-android.txt;
5>          intermediate.common.xamarin;
5>          intermediate.references;
5>          intermediate.application;
5>          proguard.cfg;
5>       (TaskId:297)
5>  Task Parameter:
5>      LibraryProjectJars=
5>          obj\Release\__library_projects__\AndroidTranscoder\library_project_imports\AndroidTranscode.jar
5>          obj\Release\__library_projects__\FormsViewGroup\library_project_imports\formsviewgroup.jar
5>          obj\Release\__library_projects__\OkHttp\library_project_imports\okhttp-2.3.0-jar-with-dependencies.jar (TaskId:297)
5>  Task Parameter:
5>      AdditionalJavaLibraryReferences=
5>          C:\Users\owner\AppData\Local\Xamarin\Android.Support.v4\21.0.3\embedded\classes.jar
5>          C:\Users\owner\AppData\Local\Xamarin\Android.Support.v4\21.0.3\embedded\libs\internal_impl-21.0.3.jar (TaskId:297)
5>  Task Parameter:ProguardJarInput=obj\Release\proguard\__proguard_input__.jar (TaskId:297)
5>  Task Parameter:ProguardJarOutput=obj\Release\proguard\__proguard_output__.jar (TaskId:297)
5>  Task Parameter:DumpOutput=obj\Release\proguard\dump.txt (TaskId:297)
5>  Task Parameter:PrintSeedsOutput=obj\Release\proguard\seeds.txt (TaskId:297)
5>  Task Parameter:PrintUsageOutput=obj\Release\proguard\usage.txt (TaskId:297)
5>  Task Parameter:PrintMappingOutput=obj\Release\proguard\mapping.txt (TaskId:297)
5>  Proguard (TaskId:297)
5>    JavaPlatformJarPath: C:\Users\owner\AppData\Local\Android\android-sdk\platforms\android-23\android.jar (TaskId:297)
5>    MonoPlatformJarPath: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v6.0\mono.android.jar (TaskId:297)
5>    ClassesOutputDirectory: obj\Release\android\bin\classes (TaskId:297)
5>    ProguardGeneratedApplicationConfiguration: obj\Release\proguard\proguard_project_primary.cfg (TaskId:297)
5>    ProguardJarInput: obj\Release\proguard\__proguard_input__.jar (TaskId:297)
5>    ProguardJarOutput: obj\Release\proguard\__proguard_output__.jar (TaskId:297)
5>    ProguardConfigurationFiles: (TaskId:297)
5>      
5>          sdk.dirtools\proguard\proguard-android.txt;
5>          intermediate.common.xamarin;
5>          intermediate.references;
5>          intermediate.application;
5>          proguard.cfg;
5>       (TaskId:297)
5>    JavaSourceFiles: (TaskId:297)
5>    JavaLibraries: (TaskId:297)
5>    ExternalJavaLibraries: (TaskId:297)
5>    DoNotPackageJavaLibraries: (TaskId:297)
5>    LibraryProjectJars: (TaskId:297)
5>      obj\Release\__library_projects__\AndroidTranscoder\library_project_imports\AndroidTranscode.jar (TaskId:297)
5>      obj\Release\__library_projects__\FormsViewGroup\library_project_imports\formsviewgroup.jar (TaskId:297)
5>      obj\Release\__library_projects__\OkHttp\library_project_imports\okhttp-2.3.0-jar-with-dependencies.jar (TaskId:297)
5>    UseProguard: False (TaskId:297)
5>    EnableLogging: False (TaskId:297)
5>    DumpOutput: obj\Release\proguard\dump.txt (TaskId:297)
5>    PrintSeedsOutput: obj\Release\proguard\seeds.txt (TaskId:297)
5>    PrintMappingOutput: obj\Release\proguard\mapping.txt (TaskId:297)
5>  Environment Variables passed to tool: (TaskId:297)
5>    java_tool_options= -Dfile.encoding=UTF8 (TaskId:297)
5>    proguard_home=C:\Users\owner\AppData\Local\Android\android-sdk\tools\proguard (TaskId:297)
5>  C:\Program Files (x86)\Java\jdk1.7.0_71\\bin\java.exe -jar C:\Users\owner\AppData\Local\Android\android-sdk\tools\proguard\lib\proguard.jar -include C:\Users\owner\AppData\Local\Android\android-sdk\tools\proguard\proguard-android.txt -include obj\Release\proguard\proguard_xamarin.cfg -include obj\Release\proguard\proguard_project_references.cfg -include obj\Release\proguard\proguard_project_primary.cfg -include proguard.cfg "-injars 'obj\Release\proguard\__proguard_input__.jar';'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v6.0\mono.android.jar';'obj\Release\__library_projects__\AndroidTranscoder\library_project_imports\AndroidTranscode.jar';'obj\Release\__library_projects__\FormsViewGroup\library_project_imports\formsviewgroup.jar';'obj\Release\__library_projects__\OkHttp\library_project_imports\okhttp-2.3.0-jar-with-dependencies.jar';'C:\Users\owner\AppData\Local\Xamarin\Android.Support.v4\21.0.3\embedded\classes.jar';'C:\Users\owner\AppData\Local\Xamarin\Android.Support.v4\21.0.3\embedded\libs\internal_impl-21.0.3.jar'" "-libraryjars 'C:\Users\owner\AppData\Local\Android\android-sdk\platforms\android-23\android.jar'" -outjars "obj\Release\proguard\__proguard_output__.jar"  (TaskId:297)
5>  ProGuard, version 4.7 (TaskId:297)
5>  Reading input... (TaskId:297)
5>  Reading program jar [C:\Workspace\Mobile\Blert\Source\Blert\Blert.Droid\obj\Release\proguard\__proguard_input__.jar] (TaskId:297)
5>  Reading program jar [C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v6.0\mono.android.jar] (TaskId:297)
5>  Reading program jar [C:\Workspace\Mobile\Blert\Source\Blert\Blert.Droid\obj\Release\__library_projects__\AndroidTranscoder\library_project_imports\AndroidTranscode.jar] (TaskId:297)
5>  Reading program jar [C:\Workspace\Mobile\Blert\Source\Blert\Blert.Droid\obj\Release\__library_projects__\FormsViewGroup\library_project_imports\formsviewgroup.jar] (TaskId:297)
5>  Reading program jar [C:\Workspace\Mobile\Blert\Source\Blert\Blert.Droid\obj\Release\__library_projects__\OkHttp\library_project_imports\okhttp-2.3.0-jar-with-dependencies.jar] (TaskId:297)
5>  Reading program jar [C:\Users\owner\AppData\Local\Xamarin\Android.Support.v4\21.0.3\embedded\classes.jar] (TaskId:297)
5>  Reading program jar [C:\Users\owner\AppData\Local\Xamarin\Android.Support.v4\21.0.3\embedded\libs\internal_impl-21.0.3.jar] (TaskId:297)
5>  Reading library jar [C:\Users\owner\AppData\Local\Android\android-sdk\platforms\android-23\android.jar] (TaskId:297)
5>  Initializing... (TaskId:297)
5>  Note: the configuration doesn't specify which class members to keep for class 'android.support.v4.view.ViewPager$OnPageChangeListener' (TaskId:297)
5>  Note: the configuration doesn't specify which class members to keep for class 'mono.android.support.v4.view.ViewPager_OnPageChangeListenerImplementor' (TaskId:297)
5>  Note: the configuration doesn't specify which class members to keep for class 'android.support.v4.view.ViewPager$PageTransformer' (TaskId:297)
5>  Note: the configuration doesn't specify which class members to keep for class 'android.support.v4.widget.DrawerLayout$DrawerListener' (TaskId:297)
5>  Note: the configuration doesn't specify which class members to keep for class 'mono.android.support.v4.widget.DrawerLayout_DrawerListenerImplementor' (TaskId:297)
5>  Note: the configuration doesn't specify which class members to keep for class 'android.support.v4.widget.DrawerLayoutImpl' (TaskId:297)
5>  Note: the configuration doesn't specify which class members to keep for class 'android.support.v4.widget.SwipeRefreshLayout$OnRefreshListener' (TaskId:297)
5>  Note: the configuration doesn't specify which class members to keep for class 'mono.android.support.v4.widget.SwipeRefreshLayout_OnRefreshListenerImplementor' (TaskId:297)
5>PROGUARD : warning : net.ypresto.androidtranscoder.engine.MediaFormatValidator: can't find referenced class org.jcodec.codecs.h264.H264Utils
5>PROGUARD : warning : net.ypresto.androidtranscoder.engine.MediaFormatValidator: can't find referenced class org.jcodec.codecs.h264.io.model.SeqParameterSet
5>PROGUARD : warning : net.ypresto.androidtranscoder.engine.MediaFormatValidator: can't find referenced class org.jcodec.codecs.h264.io.model.SeqParameterSet
5>PROGUARD : warning : net.ypresto.androidtranscoder.engine.MediaFormatValidator: can't find referenced class org.jcodec.codecs.h264.H264Utils
5>PROGUARD : warning : net.ypresto.androidtranscoder.engine.MediaFormatValidator: can't find referenced class org.jcodec.codecs.h264.io.model.SeqParameterSet
5>PROGUARD : warning : net.ypresto.androidtranscoder.engine.MediaFormatValidator: can't find referenced class org.jcodec.codecs.h264.io.model.SeqParameterSet
5>PROGUARD : warning : okio.DeflaterSink: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
5>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.Files
5>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.Files
5>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.Files
5>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.Path
5>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.OpenOption
5>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.Path
5>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.OpenOption
5>PROGUARD : warning : okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
5>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.Path
5>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.OpenOption
5>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.Path
5>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.OpenOption
5>PROGUARD : warning : okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
5>  Note: android.support.v4.text.ICUCompatIcs: can't find dynamically referenced class libcore.icu.ICU (TaskId:297)
5>  Note: com.squareup.okhttp.internal.Platform: can't find dynamically referenced class com.android.org.conscrypt.OpenSSLSocketImpl (TaskId:297)
5>  Note: com.squareup.okhttp.internal.Platform: can't find dynamically referenced class org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl (TaskId:297)
5>  Note: android.support.v4.app.NotificationCompatJellybean accesses a declared field 'icon' dynamically (TaskId:297)
5>        Maybe this is program field 'android.support.v4.app.NotificationCompat$Action  int icon; ' (TaskId:297)
5>        Maybe this is program field 'blert.droid.R$drawable  int icon; ' (TaskId:297)
5>        Maybe this is library field 'android.R$attr  int icon; ' (TaskId:297)
5>        Maybe this is library field 'android.R$id  int icon; ' (TaskId:297)
5>        Maybe this is library field 'android.app.LauncherActivity$ListItem  android.graphics.drawable.Drawable icon; ' (TaskId:297)
5>        Maybe this is library field 'android.app.Notification  int icon; ' (TaskId:297)
5>        Maybe this is library field 'android.app.Notification$Action  int icon; ' (TaskId:297)
5>        Maybe this is library field 'android.appwidget.AppWidgetProviderInfo  int icon; ' (TaskId:297)
5>        Maybe this is library field 'android.content.pm.PackageItemInfo  int icon; ' (TaskId:297)
5>        Maybe this is library field 'android.content.pm.ResolveInfo  int icon; ' (TaskId:297)
5>        Maybe this is library field 'android.inputmethodservice.Keyboard$Key  android.graphics.drawable.Drawable icon; ' (TaskId:297)
5>        Maybe this is library field 'android.speech.tts.TextToSpeech$EngineInfo  int icon; ' (TaskId:297)
5>  Note: android.support.v4.app.NotificationCompatJellybean accesses a declared field 'title' dynamically (TaskId:297)
5>        Maybe this is program field 'android.support.v4.app.NotificationCompat$Action  java.lang.CharSequence title; ' (TaskId:297)
5>        Maybe this is program field 'blert.droid.R$id  int title; ' (TaskId:297)
5>        Maybe this is library field 'android.R$attr  int title; ' (TaskId:297)
5>        Maybe this is library field 'android.R$id  int title; ' (TaskId:297)
5>        Maybe this is library field 'android.app.Notification$Action  java.lang.CharSequence title; ' (TaskId:297)
5>        Maybe this is library field 'android.preference.PreferenceActivity$Header  java.lang.CharSequence title; ' (TaskId:297)
5>  Note: android.support.v4.app.NotificationCompatJellybean accesses a declared field 'actionIntent' dynamically (TaskId:297)
5>        Maybe this is program field 'android.support.v4.app.NotificationCompat$Action  android.app.PendingIntent actionIntent; ' (TaskId:297)
5>        Maybe this is library field 'android.app.Notification$Action  android.app.PendingIntent actionIntent; ' (TaskId:297)
5>  Note: the configuration refers to the unknown class 'com.google.vending.licensing.ILicensingService' (TaskId:297)
5>  Note: the configuration refers to the unknown class 'com.android.vending.licensing.ILicensingService' (TaskId:297)
5>  Note: the configuration keeps the entry point 'android.support.v4.view.ViewPager  void setOnAdapterChangeListener(android.support.v4.view.ViewPager$OnAdapterChangeListener); ', but not the descriptor class 'android.support.v4.view.ViewPager$OnAdapterChangeListener' (TaskId:297)
5>  Note: the configuration keeps the entry point 'android.support.v4.view.ViewPager  void calculatePageOffsets(android.support.v4.view.ViewPager$ItemInfo,int,android.support.v4.view.ViewPager$ItemInfo); ', but not the descriptor class 'android.support.v4.view.ViewPager$ItemInfo' (TaskId:297)
5>  Note: the configuration keeps the entry point 'android.support.v4.view.ViewPager  void calculatePageOffsets(android.support.v4.view.ViewPager$ItemInfo,int,android.support.v4.view.ViewPager$ItemInfo); ', but not the descriptor class 'android.support.v4.view.ViewPager$ItemInfo' (TaskId:297)
5>        You should check if you need to specify additional program jars. (TaskId:297)
5>PROGUARD : warning : there were 20 unresolved references to classes or interfaces.
5>           You may need to specify additional library jars (using '-libraryjars'). (TaskId:297)
5>  Note: there were 2 references to unknown classes. (TaskId:297)
5>        You should check your configuration for typos. (TaskId:297)
5>  Note: there were 3 unkept descriptor classes in kept class members. (TaskId:297)
5>        You should consider explicitly keeping the mentioned classes (TaskId:297)
5>        (using '-keep'). (TaskId:297)
5>  Note: there were 3 unresolved dynamic references to classes or interfaces. (TaskId:297)
5>  Note: there were 3 accesses to class members by means of introspection. (TaskId:297)
5>        You should consider explicitly keeping the mentioned class members (TaskId:297)
5>        (using '-keep' or '-keepclassmembers'). (TaskId:297)
5>  java.io.IOException: Please correct the above warnings first. (TaskId:297)
5>      at proguard.Initializer.execute(Initializer.java:321) (TaskId:297)
5>      at proguard.ProGuard.initialize(ProGuard.java:211) (TaskId:297)
5>      at proguard.ProGuard.execute(ProGuard.java:86) (TaskId:297)
5>      at proguard.ProGuard.main(ProGuard.java:492) (TaskId:297)
5>  Picked up JAVA_TOOL_OPTIONS:  -Dfile.encoding=UTF8 (TaskId:297)
5>C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1815,3): error MSB6006: "java.exe" exited with code 1.
5>Done executing task "Proguard" -- FAILED. (TaskId:297)
5>Done building target "_CompileToDalvik" in project "Blert.Droid.csproj" -- FAILED.: (TargetId:241)

【问题讨论】:

在控制台输出下查看此错误的更多信息。例如,它可能是丢失的文件或错误的文件名。 java.io.IOException: Please correct the above warnings first ...如果你想让错误消失,你必须修复它们 SDK 管理器是否建议任何更新?您是否有可用的 jdk 更新或不一致的版本?只是建议,因为我不知道;) 你好,朋友。我和你有完全相同的错误。你能解决吗? 您能解决这些问题吗?特别是“对类或接口的 20 个未解决的引用”? 【参考方案1】:

答案可以在这个帖子中找到。

Xamarin.Android Proguard - Unsupported class version number 52.0

您还需要将以下文件从旧的 proguard 复制到新文件夹中。

proguard-android.txt proguard-android-optimize.txt proguard-project.txt

【讨论】:

【参考方案2】:

尝试在 Proguard.cfg 文件中添加以下行:

-dontwarn okio.**

如果这没有帮助,也添加这些:

-dontwarn org.jcodec.codecs.h264.** 
-keep class org.jcodec.codecs.h264.** *;

【讨论】:

【参考方案3】:

我所要做的就是将 proguard 升级到最新版本:https://sourceforge.net/projects/proguard/files/

在 macOS 上,如果使用 Xamarin Studio/Visual Studio for Mac,Proguard 目录的位置在这里:

/Users/your_username/Library/Developer/Xamarin/android-sdk-macosx/tools/proguard/bin

【讨论】:

【参考方案4】:

这可能对某人有所帮助。我的问题是这里描述的 proguard.cfg 编码: https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/proguard/#Troubleshooting

尝试在 notepad++ 中打开 cfg 文件。如果编码是“Encode in UTF-8 BOM”,则需要使用“Encode in UTF-8”保存文件

【讨论】:

【参考方案5】:

您能否尝试在项目属性/选项中将 Java 堆大小增加到 1G

【讨论】:

这对“20 个未解决的类或接口引用”有何帮助?

以上是关于为啥我的 Xamarin.Android 项目不能在启用 Proguard 的情况下构建:“java.exe”退出代码 1的主要内容,如果未能解决你的问题,请参考以下文章

Xama不会跟踪Xamarin Android新文件

无法构建xamarin android项目

Xamarin + Android + Binding YouTube 视频播放器编译错误

构建xamarin android项目不成功,错误XA4212

Dotfuscator 在集成后构建解决方案的 Xamarin.Android 项目上引发错误

访问路径被拒绝(Xamarin/Android)