Search code examples
xamarinxamarin.formsproguardvisual-studio-2017android-proguard

ProGuard: "java.exe" exited with code 1 after adding ModernHTTPClient


In the Xamarin.Forms project I added ModernHTTPClient library and now the ProGuard step breaks with error:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2025,3): error MSB6006: "java.exe" exited with code 1.

(Previously, I had some issues with ProGuard but was able to get it to work while targeting Android 7.1 by upgrading ProGuard to latest version.)

Some of the details from the log file are below.

2>  Proguard (TaskId:363)
2>    AndroidSdkDirectory: C:\android-sdk\ (TaskId:363)
2>    JavaPlatformJarPath: C:\android-sdk\platforms\android-25\android.jar (TaskId:363)
2>    ClassesOutputDirectory: obj\Release\android\bin\classes (TaskId:363)
2>    AcwMapFile: obj\Release\acw-map.txt (TaskId:363)
2>    ProguardGeneratedApplicationConfiguration: obj\Release\proguard\proguard_project_primary.cfg (TaskId:363)
2>    ProguardJarInput: obj\Release\proguard\__proguard_input__.jar (TaskId:363)
2>    ProguardJarOutput: obj\Release\proguard\__proguard_output__.jar (TaskId:363)
2>    ProguardGeneratedReferenceConfiguration: (TaskId:363)
2>      obj\Release\proguard\proguard_project_references.cfg (TaskId:363)
2>    ProguardGeneratedApplicationConfiguration: (TaskId:363)
2>      obj\Release\proguard\proguard_project_primary.cfg (TaskId:363)
2>    ProguardCommonXamarinConfiguration: (TaskId:363)
2>      obj\Release\proguard\proguard_xamarin.cfg (TaskId:363)
2>    ProguardConfigurationFiles: (TaskId:363)
2>      
2>          {sdk.dir}tools\proguard\proguard-android.txt;
2>          {intermediate.common.xamarin};
2>          {intermediate.references};
2>          {intermediate.application};
2>          ;
2>       (TaskId:363)
2>    ExternalJavaLibraries: (TaskId:363)
2>    DoNotPackageJavaLibraries: (TaskId:363)
2>    UseProguard: False (TaskId:363)
2>    EnableLogging: False (TaskId:363)
2>    DumpOutput: obj\Release\proguard\dump.txt (TaskId:363)
2>    PrintSeedsOutput: obj\Release\proguard\seeds.txt (TaskId:363)
2>    PrintMappingOutput: obj\Release\proguard\mapping.txt (TaskId:363)
2>  Environment Variables passed to tool: (TaskId:363)
2>    JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8 (TaskId:363)
2>  C:\Program Files\Java\jdk1.8.0_121\\bin\java.exe -jar C:\android-sdk\tools\proguard\lib\proguard.jar -include C:\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 "-injars 'obj\Release\proguard\__proguard_input__.jar';'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ReferenceAssemblies\Microsoft\Framework\MonoAndroid\v7.1\mono.android.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\user\AppData\Local\Xamarin\Xamarin.Android.Support.Animated.Vector.Drawable\23.3.0.0\embedded\classes.jar';'C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.Design\23.3.0.0\embedded\classes.jar';'C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v4\23.3.0.0\embedded\classes.jar';'C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v4\23.3.0.0\embedded\libs\internal_impl-23.3.0.jar';'C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v7.AppCompat\23.3.0.0\embedded\classes.jar';'C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v7.CardView\23.3.0.0\embedded\classes.jar';'C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v7.MediaRouter\23.3.0.0\embedded\classes.jar';'C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v7.MediaRouter\23.3.0.0\embedded\libs\internal_impl-23.3.0.jar';'C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v7.RecyclerView\23.3.0.0\embedded\classes.jar';'C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.Vector.Drawable\23.3.0.0\embedded\classes.jar'" "-libraryjars 'C:\android-sdk\platforms\android-25\android.jar'" -outjars "obj\Release\proguard\__proguard_output__.jar" -optimizations !code/allocation/variable  (TaskId:363)
2>  ProGuard, version 5.3.3 (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.widget.Snackbar$Callback$DismissEvent' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.widget.Snackbar$Callback' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.widget.Snackbar$Duration' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.widget.CoordinatorLayout$Behavior' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.widget.CoordinatorLayout$DefaultBehavior' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.internal.NavigationMenuPresenter$NavigationMenuHeaderItem' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.internal.NavigationMenuPresenter$NavigationMenuItem' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.internal.NavigationMenuPresenter$NavigationMenuTextItem' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.internal.NavigationMenuPresenter$ViewHolder' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.widget.AppBarLayout$LayoutParams$ScrollFlags' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.widget.AppBarLayout$OnOffsetChangedListener' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'mono.android.support.design.widget.AppBarLayout_OnOffsetChangedListenerImplementor' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.widget.BottomSheetBehavior$State' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.widget.FloatingActionButton$OnVisibilityChangedListener' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.widget.HeaderBehavior' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.widget.HeaderScrollingViewBehavior' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.widget.NavigationView$OnNavigationItemSelectedListener' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'mono.android.support.design.widget.NavigationView_OnNavigationItemSelectedListenerImplementor' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'android.support.design.widget.SwipeDismissBehavior$OnDismissListener' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'mono.android.support.design.widget.SwipeDismissBehavior_OnDismissListenerImplementor' (TaskId:363)
...
2>  Note: the configuration doesn't specify which class members to keep for class 'com.squareup.okhttp.Authenticator' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'com.squareup.okhttp.Callback' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'com.squareup.okhttp.Interceptor$Chain' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'com.squareup.okhttp.Interceptor' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'okio.ForwardingSink' (TaskId:363)
2>  Note: the configuration doesn't specify which class members to keep for class 'okio.ForwardingSource' (TaskId:363)
...
2>  Reading program jar [C:\Users\user\Desktop\MyProjectXXX\MyProjectXXX.Mobile\MyProjectXXX.Mobile.Android\obj\Release\__library_projects__\FormsViewGroup\library_project_imports\formsviewgroup.jar] (TaskId:363)
2>  Reading program jar [C:\Users\user\Desktop\MyProjectXXX\MyProjectXXX.Mobile\MyProjectXXX.Mobile.Android\obj\Release\__library_projects__\OkHttp\library_project_imports\okhttp-2.3.0-jar-with-dependencies.jar] (TaskId:363)
2>  Reading program jar [C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.Animated.Vector.Drawable\23.3.0.0\embedded\classes.jar] (TaskId:363)
2>  Reading program jar [C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.Design\23.3.0.0\embedded\classes.jar] (TaskId:363)
2>  Reading program jar [C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v4\23.3.0.0\embedded\classes.jar] (TaskId:363)
2>  Reading program jar [C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v4\23.3.0.0\embedded\libs\internal_impl-23.3.0.jar] (TaskId:363)
2>  Reading program jar [C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v7.AppCompat\23.3.0.0\embedded\classes.jar] (TaskId:363)
2>  Reading program jar [C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v7.CardView\23.3.0.0\embedded\classes.jar] (TaskId:363)
2>  Reading program jar [C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v7.MediaRouter\23.3.0.0\embedded\classes.jar] (TaskId:363)
2>  Reading program jar [C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v7.MediaRouter\23.3.0.0\embedded\libs\internal_impl-23.3.0.jar] (TaskId:363)
2>  Reading program jar [C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.v7.RecyclerView\23.3.0.0\embedded\classes.jar] (TaskId:363)
2>  Reading program jar [C:\Users\user\AppData\Local\Xamarin\Xamarin.Android.Support.Vector.Drawable\23.3.0.0\embedded\classes.jar] (TaskId:363)
2>  Reading library jar [C:\android-sdk\platforms\android-25\android.jar] (TaskId:363)
2>  Initializing... (TaskId:363)
2>  Note: the configuration refers to the unknown class 'com.google.vending.licensing.ILicensingService' (TaskId:363)
2>  Note: the configuration refers to the unknown class 'com.android.vending.licensing.ILicensingService' (TaskId:363)
2>  Note: the configuration refers to the unknown class 'android.support.annotation.Keep' (TaskId:363)
2>  Note: the configuration refers to the unknown class 'android.support.annotation.Keep' (TaskId:363)
2>  Note: the configuration refers to the unknown class 'android.support.annotation.Keep' (TaskId:363)
2>  Note: the configuration refers to the unknown class 'android.support.annotation.Keep' (TaskId:363)
2>  Note: the configuration refers to the unknown class 'android.support.annotation.Keep' (TaskId:363)
2>  Note: android.support.v4.app.NotificationCompatJellybean calls 'Field.getType' (TaskId:363)
2>PROGUARD : warning : okio.DeflaterSink: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
2>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.Files
2>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.Files
2>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.Files
2>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.Path
2>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.OpenOption
2>PROGUARD : warning : okio.Okio: can't find referenced class java.nio.file.Path
...
2>  Note: there were 7 references to unknown classes. (TaskId:363)
2>        You should check your configuration for typos. (TaskId:363)
2>        (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass) (TaskId:363)
2>  Note: there were 1 classes trying to access generic signatures using reflection. (TaskId:363)
2>        You should consider keeping the signature attributes (TaskId:363)
2>        (using '-keepattributes Signature'). (TaskId:363)
2>        (http://proguard.sourceforge.net/manual/troubleshooting.html#attributes) (TaskId:363)
2>  Note: there were 15 unkept descriptor classes in kept class members. (TaskId:363)
2>        You should consider explicitly keeping the mentioned classes (TaskId:363)
2>        (using '-keep'). (TaskId:363)
2>        (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass) (TaskId:363)
2>  Note: there were 9 unresolved dynamic references to classes or interfaces. (TaskId:363)
2>        You should check if you need to specify additional program jars. (TaskId:363)
2>        (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass) (TaskId:363)
2>  Note: there were 3 accesses to class members by means of introspection. (TaskId:363)
2>        You should consider explicitly keeping the mentioned class members (TaskId:363)
2>        (using '-keep' or '-keepclassmembers'). (TaskId:363)
2>        (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclassmember) (TaskId:363)
2>PROGUARD : warning : there were 14 unresolved references to classes or interfaces.
2>           You may need to add missing library jars or update their versions. (TaskId:363)
2>           If your code works fine without the missing classes, you can suppress (TaskId:363)
2>           the warnings with '-dontwarn' options. (TaskId:363)
2>           (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass) (TaskId:363)
2>  java.io.IOException: Please correct the above warnings first. (TaskId:363)
2>      at proguard.Initializer.execute(Initializer.java:473) (TaskId:363)
2>      at proguard.ProGuard.initialize(ProGuard.java:233) (TaskId:363)
2>      at proguard.ProGuard.execute(ProGuard.java:98) (TaskId:363)
2>      at proguard.ProGuard.main(ProGuard.java:538) (TaskId:363)
2>  Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 (TaskId:363)
2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2025,3): error MSB6006: "java.exe" exited with code 1.
2>Done executing task "Proguard" -- FAILED. (TaskId:363)
2>Done building target "_CompileToDalvikWithDx" in project "MyProjectXXX.Mobile.Android.csproj" -- FAILED.: (TargetId:310)
2>

I tried increasing the Java heap size to 1G, but that had no effect.

Please let me know if you have any ideas on how to resolve this. Thanks.


Solution

  • It sounds like all you need to do is add a proguard.cfg file to your project with build action set to ProguardConfiguration to remove any warnings and keep any necessary classes for example:

    # General Android
    -dontwarn org.apache.http.**
    -dontwarn android.net.http.AndroidHttpClient
    
    # Android Support Library
    -keep class android.support.multidex.MultiDexApplication
    -keep class android.support.v4.**
    -keep class android.support.v7.** {
        public *;
    }
    
    # Google Play Billing
    -keep class com.android.vending.billing.**
    
    # Google Play Services
    -dontwarn com.google.android.gms.internal.*
    -keep class * extends java.util.ListResourceBundle {
        protected java.lang.Object[][] getContents();
    }