我一直在研究我的应用程序的最新版本,它测试得很好,但是当我发布ProGuard版本时,我会收到许多错误,主要是因为无法找到org.apache.http.*,我在项目中没有使用.我在整个项目中搜索了该文本但找不到它.我添加了一些依赖项,但没有我认为会使用HTTP.
我如何弄清楚为什么 ProGuard会抱怨并妥善解决?它说我可以用"--stacktrace选项"运行,但我无法弄清楚如何做到这一点.
我感谢任何帮助,因为我发现ProGuard常常令人困惑.
构建输出:
Warning: com.google.android.gms.internal.zzw$zza: can't find superclass or interface org.apache.http.client.methods.HttpEntityEnclosingRequestBase
Warning: com.google.android.gms.analytics.internal.zzam: can't find referenced class org.apache.http.NameValuePair
Warning: com.google.android.gms.analytics.internal.zzam: can't find referenced class org.apache.http.client.utils.URLEncodedUtils
Warning: com.google.android.gms.analytics.internal.zzam: can't find referenced class org.apache.http.client.utils.URLEncodedUtils
Warning: com.google.android.gms.analytics.internal.zzam: can't find referenced class org.apache.http.NameValuePair
Warning: com.google.android.gms.analytics.internal.zzam: can't find referenced class org.apache.http.NameValuePair
Warning: com.google.android.gms.analytics.internal.zzj: can't find referenced class org.apache.http.NameValuePair
Warning: com.google.android.gms.analytics.internal.zzj: can't find referenced class org.apache.http.client.utils.URLEncodedUtils
Warning: com.google.android.gms.analytics.internal.zzj: can't find referenced class org.apache.http.client.utils.URLEncodedUtils
Warning: com.google.android.gms.analytics.internal.zzj: can't find referenced class …Run Code Online (Sandbox Code Playgroud) 嗨,我正在努力为我的项目创建发布版本.我已经通过SO/Google帮助在Progaurd上尝试了很多东西,但我仍然无法创建发布版本.
有人可以帮我这个吗?我总是遇到这个问题:
Run Code Online (Sandbox Code Playgroud)Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'. > java.io.IOException: Please correct the above warnings first.
这是完整的详细错误:http://justpaste.it/perror抱歉,我不得不把它作为一个链接,因为它是巨大的.
这是依赖项:
//compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.rengwuxian.materialedittext:library:2.1.4'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.4'
compile 'org.apache.httpcomponents:httpcore:4.4.1'
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.loopj.android:android-async-http:1.4.8'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile project(':pageIndicator')
compile 'com.github.neopixl:PixlUI:v1.0.6'
compile 'com.github.bumptech.glide:glide:3.6.1'
Run Code Online (Sandbox Code Playgroud)
我的progaurd文件:
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
# …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ParseFacebookUtils库登录Facebook并且它运行良好,但是当我启用Proguard文件时,我在Facebook登录活动启动时遇到此异常:
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{my.package.name/com.facebook.FacebookActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
at android.app.ActivityThread.access$900(ActivityThread.java:175)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(NativeStart.java)
Caused by java.lang.NullPointerException
at java.lang.Enum$1.create(Enum.java:43)
at java.lang.Enum$1.create(Enum.java:35)
at libcore.util.BasicLruCache.get(BasicLruCache.java:54)
at java.lang.Enum.getSharedConstants(Enum.java:209)
at java.lang.Enum.valueOf(Enum.java:189)
at com.facebook.login.LoginBehavior.valueOf(LoginBehavior.java:26)
at com.facebook.login.LoginClient$Request.(LoginClient.java)
at com.facebook.login.LoginClient$Request.(LoginClient.java)
at com.facebook.login.LoginClient$Request$1.createFromParcel(LoginClient.java:2521)
at android.os.Parcel.readParcelable(Parcel.java:2111)
at android.os.Parcel.readValue(Parcel.java:2020)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2321)
at android.os.Bundle.unparcel(Bundle.java:249)
at android.os.Bundle.getString(Bundle.java:1118)
at android.content.Intent.getStringExtra(Intent.java:5145)
at com.google.android.gms.analytics.Tracker$zza.zziJ(Unknown Source:4000)
at com.google.android.gms.analytics.GoogleAnalytics.isInitialized(Unknown Source)
at com.google.android.gms.analytics.GoogleAnalytics$zzb.onActivityStarted(Unknown Source)
at android.app.Application.dispatchActivityStarted(Application.java:219)
at android.app.Activity.onStart(Activity.java:1087) …Run Code Online (Sandbox Code Playgroud) 我的应用程序的方法计数高于64k限制,所以我使用Proguard来减少它.
一切都适用于发布版本.
另一方面,调试版本仅适用于Lollipop +设备.在Lollipop之前的设备上启动时,我总是有臭名昭着的错误:
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
这是我在app level gradle文件中的内容:
buildTypes {
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试minifyEnabled true在调试版本中删除,然后在Lollipop +上构建失败,因此proguard正在工作!但不是在棒棒糖前.
因为我知道minifyEnabled不应该依赖于平台,所以也许构建过程会在Lollipop之前的设备上跳过它(因为我不知道是什么原因).
有人知道这个问题的解决方案吗?
PS.我知道multidex的可能性,但我将它作为我的最后手段.
编辑:
这是app level gradle文件的完整代码:
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
apply plugin: 'me.tatarka.retrolambda'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'me.tatarka:gradle-retrolambda:3.2.5'
classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.5.5'
}
}
android {
compileSdkVersion 24
buildToolsVersion "23.0.3"
defaultConfig …Run Code Online (Sandbox Code Playgroud) 我想在我的应用程序搭配使用ProGuard设置的ProGuard为true,那么问题开始时我用proguard的按照我的lib导入这
-keepnames class com.somepackage.*与应用是越来越得到坠毁我的包的名字时,我尝试使用签名的APK.我知道这是一个愚蠢的问题,但我坚持到最后5小时不能找到一个简单的解决方案因为我使用大约20 lib.我也跟着这个.Plz指导我,我该怎么做?
这是我的proguard规则类代码
-keepnames class beatbox.neelay.dummybeat.*
-keepnames com.srx.widget.*
-keepnames de.hdodenhof.circleimageview.CircleImageView.*
-keepnames com.bumptech.glide.*
-keepnames com.romainpiel.shimmer.*
-keepnames com.vansuita.gaussianblur.GaussianBlur
-keepnames com.antonyt.infiniteviewpager.InfinitePagerAdapter
-keepnames com.antonyt.infiniteviewpager.InfiniteViewPager
-keepnames com.eftimoff.viewpagertransformers.CubeOutTransformer
-keepnames com.ms.square.android.glassview.GlassView
-keepnames me.alexrs.fontpagertitlestrip.lib.FontPagerTitleStrip
Run Code Online (Sandbox Code Playgroud)
我现在无法生成任何已签名的apk.错误是.
Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
Run Code Online (Sandbox Code Playgroud)
作业失败,请参阅日志了解详情
任何提示都会有所帮助.控制台输出
FAILURE: Build failed with an exception.
Run Code Online (Sandbox Code Playgroud)
出了什么问题:任务执行失败':app:transformClassesAndResourcesWithProguardForRelease'.
作业失败,请参阅日志了解详情
尝试:使用--stacktrace选项运行以获取堆栈跟踪.使用--info或--debug选项运行以获取更多日志输出.
编辑build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "beatbox.neelay.dummybeat"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
renderscriptTargetApi 24
renderscriptSupportModeEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" …Run Code Online (Sandbox Code Playgroud) 在设置之前,每件事情都很好
minifyEnabled是的
和
shrinkResources为true
设置这些值后,每当我运行项目时,我都会收到此错误:
Information:Gradle tasks [:app:assembleProdRelease]
Error:path may not be null or empty string. path='null'
Information:BUILD FAILED
Information:Total time: 23.606 secs
Information:1 error
Information:0 warnings
Information:See complete output in console
Run Code Online (Sandbox Code Playgroud)
这个错误意味着什么错误:路径可能不是null或空字符串.path ='null' 这是build.gradle:
signingConfigs {
release {
storeFile file('/home/rishabh/Documents/dekhoJks/release.jks')
storePassword "XXXXXXX"
keyAlias "XXXXXXXX"
keyPassword "XXXXXXXXX"
}
}
buildTypes {
release {
minifyEnabled true
//proguardFiles fileTree(dir: "proguard", include: ["*.pro"]).asList().toArray()
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
shrinkResources true
signingConfig signingConfigs.release
}
}
Run Code Online (Sandbox Code Playgroud)
我试着把每一个该死的东西都放在proguard.pro中:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-dump class_files.txt …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ProGuard和新的Gradle 3.0.0版本创建一个APK.对于我认为在ProGuard配置文件中忽略的类,我收到了很多警告.相同的配置适用于Gradle 2.3.3但似乎在3.0.0上中断.警告很多,几乎没有读取ProGuard配置.
我的build.gradle
buildscript {
repositories {
mavenCentral()
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.google.gms:google-services:3.0.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
}
}
allprojects {
repositories {
jcenter()
maven {
url 'https://jitpack.io'
}
maven {
url 'https://maven.google.com'
}
}
}
android{
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
signingConfig signingConfigs.release
lintOptions {
disable 'MissingTranslation'
}
}
compileSdkVersion 27
buildToolsVersion "27.0.1"
defaultConfig {
minSdkVersion 16
targetSdkVersion 27
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
Run Code Online (Sandbox Code Playgroud)
下面的Proguard警告.
Warning: library class android.animation.FloatArrayEvaluator extends …Run Code Online (Sandbox Code Playgroud) android proguard gradle android-gradle-plugin android-proguard
从这个参考:
https://github.com/codepath/android_guides/wiki/Building-your-own-Android-library
我有以下gradle文件:
android {
compileSdkVersion 25
buildToolsVersion "26.0.2"
buildTypes {
release {
minifyEnabled true
consumerProguardFiles 'consumer-proguard-rules.pro'
}
}
}
Run Code Online (Sandbox Code Playgroud)
以下proguard文件:
-dontobfuscate
-optimizations !code/allocation/variable
-keep public class * {
public protected *;
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行'assembleRelease'任务来构建我的发布aar文件时,aar中的所有类都丢失了.
有任何想法吗?
我想对任何标有kotlin internal可见性修饰符的类进行预测(混淆).
Kotlin internal类在JVM上是公共的,因此它们在Java源代码中是可见的和可用的.我不希望这些类被使用或出现在自动完成中,所以我想对它们进行模糊处理以阻止它们的使用.
我可以将什么样的规则适用于目标internal类?