2016-08-16 38 views
0

上述警告,当我试图来生成签名的.apk在Android Studio中1.5.1和完成对话框出现这个过程中,我碰到这样的消息和建筑中止:任务':app:transformClassesAndResourcesWithProguardForRelease'的执行失败。 >产生java.io.IOException:请更正第一

Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.OkHttpClient 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Cache 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.OkHttpClient 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl$Builder 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Request$Builder 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.OkHttpClient 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Call 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Response 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.ResponseBody 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Response 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.ResponseBody 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.OkHttpClient 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Cache 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl$Builder 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Request$Builder 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Response 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Cache 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Request 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Call 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Response 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.ResponseBody 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.OkHttpClient 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl$Builder 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Request$Builder 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Response 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.ResponseBody 
    Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Cache 

的build.gradle:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     .... 
     minSdkVersion 16 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled true 
      consumerProguardFiles 'proguard-rules.txt' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    compile 'com.android.support:design:23.4.0' 
    compile 'com.android.support:support-v4:23.4.0' 
    compile 'de.hdodenhof:circleimageview:1.3.0' 
    compile 'com.jakewharton:butterknife:8.0.1' 
    android{ 
     useLibrary 'org.apache.http.legacy' 
    } 
    compile 'com.squareup.picasso:picasso:2.5.2' 
    compile 'com.onesignal:OneSignal:[email protected]' 
    compile 'com.google.android.gms:play-services-gcm:8.4.0' 
    compile 'com.google.android.gms:play-services-analytics:+' 
    compile 'com.google.android.gms:play-services-location:+' 
    compile 'com.google.android.gms:play-services-appindexing:8.4.0' 
    compile 'com.github.lzyzsd:circleprogress:[email protected]' 
} 

proguard的-rules.txt:

# This is a configuration file for ProGuard. 
# http://proguard.sourceforge.net/index.html#manual/usage.html 

# Optimizations: If you don't want to optimize, use the 
# proguard-android.txt configuration file instead of this one, which 
# turns off the optimization flags. Adding optimization introduces 
# certain risks, since for example not all optimizations performed by 
# ProGuard works on all versions of Dalvik. The following flags turn 
# off various optimizations known to have issues, but the list may not 
# be complete or up to date. (The "arithmetic" optimization can be 
# used if you are only targeting Android 2.0 or later.) Make sure you 
# test thoroughly if you go this route. 
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* 
-optimizationpasses 5 
-allowaccessmodification 
-dontpreverify 

# The remainder of this file is identical to the non-optimized version 
# of the Proguard configuration file (except that the other file has 
# flags to turn off optimization). 

-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-verbose 

-keepattributes *Annotation* 
-keep public class com.google.vending.licensing.ILicensingService 
-keep public class com.android.vending.licensing.ILicensingService 

# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native 
-keepclasseswithmembernames class * { 
    native <methods>; 
} 

# keep setters in Views so that animations can still work. 
# see http://proguard.sourceforge.net/manual/examples.html#beans 
-keepclassmembers public class * extends android.view.View { 
    void set*(***); 
    *** get*(); 
} 

# We want to keep methods in Activity that could be used in the XML attribute onClick 
-keepclassmembers class * extends android.app.Activity { 
    public void *(android.view.View); 
} 

# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations 
-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keepclassmembers class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

# The support library contains references to newer platform versions. 
# Don't warn about those in case this app is linking against an older 
# platform version. We know about them, and they are safe. 
-dontwarn android.support.** 

-keep com.squareup.picasso.** { ; } 
-dontwarn com.squareup.picasso.* 

很多搜​​索后,我明白了I S应该使用-dontwarn com.squareup.picasso.*但没有任何事情发生!我仍然有同样的问题。

回答

2

,我们在您build.gradle几个错误。我们来修复它们,它应该为你解决问题。在摇篮脚本

  1. ProGuard的配置文件定义可能是你的问题的根本原因。你确定使用ProGuard配置文件proguard-rules.txt吗?因为从构建脚本看起来并不那么容易。您可以使用

    android { 
        … 
        buildTypes { 
         release { 
          minifyEnabled true 
          consumerProguardFiles 'proguard-rules.txt' 
         } 
        } 
    } 
    

    但配置是无效的申请,consumerProguardFiles设计为只能使用Android库项目。它告诉库项目将指定的ProGuard配置文件打包到输出aar中。

    在实际应用中,你必须使用

    android { 
        ... 
        buildTypes { 
         release { 
          minifyEnabled true 
          proguardFiles 'proguard-rules.txt', getDefaultProguardFile('proguard-android.txt') 
         } 
        } 
    } 
    

    的配置proguardFiles告诉构建应用指定的ProGuard配置文件。所以这意味着它没有为您的构建定义。

    请注意,默认的ProGuard文件包含所有Android应用程序所必需的一般Android规则(并且一些规则是由Android Gradle插件添加的)。 看来你已将大部分默认规则复制到你的配置中。 最佳做法是使用默认的ProGuard配置文件,不要将它们复制到您自己的配置中。

  2. 调整的ProGuard配置规则

你不需要这个规则

-keep com.squareup.picasso.** { ; } 

添加规则忽略那些毕加索警告。您可以使用

-dontwarn com.squareup.okhttp.** 

-dontwarn com.squareup.picasso.OkHttpDownloader 
在正确的地方
  • 广场useLibrary声明。
  • 这是一件小事,但你应该修补它。请勿将useLibrary置于dependencies关闭。它属于android关闭。

    android { 
        compileSdkVersion 23 
        buildToolsVersion "23.0.2" 
        useLibrary 'org.apache.http.legacy' 
        … 
    } 
    

    顺便说一句:它真的建议摆脱HttpClient。理想情况下使用OkHttp

    0

    得很不喜欢这的build.gradle:

    android { 
        compileSdkVersion 23 
        buildToolsVersion "23.0.0" 
        useLibrary 'org.apache.http.legacy' 
        ... 
    } 
    
    +0

    我把你的代码中的build.gradle但这个错误apeared '错误:超时等待锁定cp_proj类C:\ Users \ ASR \ AndroidStudioProjects \ Teroject \ app \ build.gradle'(C:\ Users \ ASR \ .gradle \ caches \ 2.8 \ scripts \ build_4rnkp3frs7d5k4pjqcgs8zqjt \ cp_proj)缓存。它目前正在被另一个Gradle实例使用。 业主PID:未知 我们的PID:4812 所有者操作:未知 我们的操作:初始化缓存 锁定的文件:C:\用户\ ASR \ .gradle \缓存\ 2.8 \脚本\ build_4rnkp3frs7d5k4pjqcgs8zqjt \ cp_proj \ cache.properties.lock ' –

    +0

    看起来是这样的:[link](http://stackoverflow.com/a/30774867/2570426) – Viana

    +0

    它没有解决问题.... –

    0

    这里是杰克沃顿毕加索的答案,Proguard的配置:

    ### PICASSO 
    
    # Checks for OkHttp versions on the classpath to determine Downloader to use. 
    -dontnote com.squareup.picasso.Utils 
    # Downloader used only when OkHttp 2.x is present on the classpath. 
    -dontwarn com.squareup.picasso.OkHttpDownloader 
    # Downloader used only when OkHttp 3.x is present on the classpath. 
    -dontwarn com.squareup.picasso.OkHttp3Downloader 
    
    
    ### OKHTTP 
    
    # Platform calls Class.forName on types which do not exist on Android to determine platform. 
    -dontnote okhttp3.internal.Platform 
    
    
    ### OKIO 
    
    # java.nio.file.* usage which cannot be used at runtime. Animal sniffer annotation. 
    -dontwarn okio.Okio 
    # JDK 7-only method which is @hide on Android. Animal sniffer annotation. 
    -dontwarn okio.DeflaterSink 
    

    Github issue in Picasso

    相关问题