标签: android-proguard

Android Proguard问题 - 跳过模糊处理时仍然出现"java.io.IOException:无法处理类..."错误

我正在使用Android Studio中的proguard构建一个Android应用程序,我的项目有一个库jar(na.jar),我想跳过混淆和预验证,因为来自na.jar的一些类在构建过程中给了我错误.所以在我的proguard配置文件中,我有以下选项

-dontpreverify 

# com.na, org.json are packages in na.jar, don't obfuscate the code in these packages
-keep class com.na.** { *; } 
-keep interface com.na.** { *; } 
-keep class org.json.** { *; } 
-keep interface org.json.** { *; } 
Run Code Online (Sandbox Code Playgroud)

但是,在构建过程中,我仍然遇到与na.jar中的错误类相关的以下错误.

Caused by: java.io.IOException: Can't read [C:\StudioProjects\PBActivity\pBActivity\libs\na.jar(;;;;;;!META-INF/MANIFEST.MF)] (Can't process class [com/na/util/BinConverter.class] (256))
    at proguard.InputReader.readInput(InputReader.java:188)
    at proguard.InputReader.readInput(InputReader.java:158)
    at proguard.InputReader.readInput(InputReader.java:136)
    at proguard.InputReader.execute(InputReader.java:66)
    at proguard.ProGuard.readInput(ProGuard.java:207)
    at proguard.ProGuard.execute(ProGuard.java:81)
    at proguard.gradle.ProGuardTask.proguard(ProGuardTask.java:1074)
    at com.android.build.gradle.tasks.AndroidProGuardTask.proguard(AndroidProGuardTask.java:87)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    ... 62 more
Caused by: java.io.IOException: Can't process class …
Run Code Online (Sandbox Code Playgroud)

java android ioexception indexoutofboundsexception android-proguard

16
推荐指数
1
解决办法
2680
查看次数

使用ProGuard混淆私有字段

我在AndroidStudio 1.2.1.1中使用ProGuard和Gradle 1.2.3.

My Gradle的发布版本配置如下:

minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
shrinkResources true
Run Code Online (Sandbox Code Playgroud)

我希望类的私有字段被混淆.

这是我的proguard配置文件(经过多次尝试)截至目前:

-allowaccessmodification
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-repackageclasses ''
-verbose
[...]
Run Code Online (Sandbox Code Playgroud)

但是在使用androddAndroidGuard 反编译后,我最终得到:

private com.google.android.gms.common.api.GoogleApiClient googleApiClient;
Run Code Online (Sandbox Code Playgroud)

我知道这种混淆的使用是有限的,但我想googleApiClient由ProGuard重命名.怎么办?

这是refcard.

有没有办法做相反的事情-keepclassmembernames

java obfuscation android proguard android-proguard

15
推荐指数
1
解决办法
2946
查看次数

Android如何使用Proguard将我的所有类放在一个包中

我正在开发SDK,我的环境有SDK库和使用它的测试项目.

我想保护我的库代码免受我的库用户的影响,因为我需要对其进行模糊处理,只是它.

所以在我的库Module中的Android Studio中,在proguard-rules.pro文件中我添加了下一个脚本:

-dontpreverify
-optimizations !code/simplification/arithmetic

-keep class !com.example.**{ *; }
-keep public class com.example.sdk.Example{*;}
-keep public class com.example.sdk.IExampleCallback{*;}
-keep public class com.example.sdk.ui.ExampleActivity

-dontwarn android.util.Log

-repackageclasses 'com.example.security'
-allowaccessmodification
Run Code Online (Sandbox Code Playgroud)

这些类被混淆,但它们的包不会改变.我让Eric Lafortune(Proguard的作者)建议添加allowaccessmodification,但它没有帮助.我也尝试使用flattenpackagehierarchy,但它没有效果.

帮助我,如何将我的所有课程放在一个包中?

android proguard android-proguard

15
推荐指数
1
解决办法
2373
查看次数

更新到Google Play服务11.8.0后,Proguard无法正常工作

将Google Play服务更新为11.8.0(从11.6.2开始)后,我的版本停止运行.

这就是我得到的:

计算堆栈大小时出现意外错误:Class = [com/google/android/gms/internal/zzao] Method = [zzf(Ljava/lang/String;)J] Exception = [java.lang.IllegalArgumentException](堆栈大小变为负数)在[com/google/android/gms/internal/zzao.zzf(Ljava/lang/String;)J]中指令[23] invokestatic#146之后失败:构建失败并出现异常.

我正在使用带有Gradle 4.4.1的Android Studio 3.0.1

我的app build.gradle文件

buildscript {
    repositories {
        maven { url "https://maven.fabric.io/public" }
    }

    dependencies {
        classpath "io.fabric.tools:gradle:1.25.1"
    }
}

repositories {
    maven { url "https://maven.fabric.io/public" }
}

apply plugin: "com.android.application"
apply plugin: "io.fabric"
apply plugin: "let"
apply plugin: "realm-android"

android {
    compileSdkVersion project.androidSDKVersion
    buildToolsVersion("$androidBuildToolsVersion")

    defaultConfig {
        versionCode project.versionCode
        versionName project.versionName

        minSdkVersion project.androidMinSdkVersion
        targetSdkVersion project.androidTargetSdkVersion

        vectorDrawables.useSupportLibrary = true
        resConfigs "pl"
    }

    buildTypes {
        release { …
Run Code Online (Sandbox Code Playgroud)

android proguard google-play-services android-proguard

15
推荐指数
1
解决办法
2320
查看次数

java.lang.NoClassDefFoundError:解析失败:Lorg/apache/commons/logging/LogFactory

类似的问题已经被要求了.但是由于Android平台兼容性的变化,这个似乎比以前的更复杂.

这是Pixel和Pixel2的错误日志,已注册Android Beta程序

08-16 13:20:53.146 9630-9630/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: me.project.android.dev, PID: 9630
    java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/commons/logging/LogFactory;
        at com.amazonaws.util.VersionInfoUtils.<clinit>(VersionInfoUtils.java:41)
        at com.amazonaws.util.VersionInfoUtils.c(VersionInfoUtils.java:77)
        at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.java:43)
        //project specific class reference removed
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.commons.logging.LogFactory" on path: DexPathList[[zip file "/data/app/me.project.android.dev-0SPRJnc8-4voauRU7Y20zQ==/base.apk"],nativeLibraryDirectories=[/data/app/me.project.android.dev-0SPRJnc8-4voauRU7Y20zQ==/lib/arm64, /data/app/me.project.android.dev-0SPRJnc8-4voauRU7Y20zQ==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.amazonaws.util.VersionInfoUtils.<clinit>(VersionInfoUtils.java:41) 
        at com.amazonaws.util.VersionInfoUtils.c(VersionInfoUtils.java:77) 
        at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.java:43) 
        //project specific class reference removed
        at android.os.Handler.handleCallback(Handler.java:873) 
        at …
Run Code Online (Sandbox Code Playgroud)

android amazon-web-services android-proguard aws-sdk-android

15
推荐指数
3
解决办法
9391
查看次数

如何在Android中使用Proguard来混淆界面方法及其参数?

我有以下代码:

public class MyClass {
    public void method1(Integer marks) {

    }

    private String method3(String name){

    }
    public interface interface1 {
        void method4(Integer ID);
        void method5(Integer rate, boolean status);
    }
}
Run Code Online (Sandbox Code Playgroud)

我用过progaurd-rules.pro

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

-keepparameternames

-keep public class *
-keepclassmembers public class *{
   public *;
 }
-keep public interface packageName.MyClass$interface1 { *; }
Run Code Online (Sandbox Code Playgroud)

混淆代码如下:

public class MyClass {
    public void method1(Integer marks) {

    }

    private String a(String var1){

    }
    public interface interface1 {
        void method4(Integer var1);
        void method5(Integer var1, boolean var2); …
Run Code Online (Sandbox Code Playgroud)

obfuscation android android-proguard

14
推荐指数
1
解决办法
2517
查看次数

如何解决多个D8警告:找不到<Class X>,默认或静态接口方法是否需要使用<Class Y>?

从3.1.4升级到Android Gradle插件到3.2.x后,我收到多个警告,例如:

D8: Type `com.google.gson.reflect.TypeToken` was not found, it is required for default or static interface methods desugaring of `com.google.gson.reflect.TypeToken org.springframework.http.converter.json.GsonHttpMessageConverter.getTypeToken(java.lang.reflect.Type)`
D8: Type `com.squareup.okhttp.MediaType` was not found, it is required for default or static interface methods desugaring of `com.squareup.okhttp.MediaType org.springframework.http.client.OkHttpClientHttpRequest.getContentType(org.springframework.http.HttpHeaders)`
D8: Type `org.apache.http.impl.client.HttpClients` was not found, it is required for default or static interface methods desugaring of `void org.springframework.http.client.HttpComponentsClientHttpRequestFactory.<init>()`
D8: Interface `org.apache.http.HttpEntity` not found. It's needed to make sure desugaring of `org.springframework.http.client.HttpComponentsStreamingClientHttpRequest$StreamingHttpEntity` is correct. Desugaring will assume that this interface …
Run Code Online (Sandbox Code Playgroud)

android proguard android-gradle-plugin android-proguard android-d8

14
推荐指数
1
解决办法
6327
查看次数

无法在Kotlin中构建发布版本

将我的Android项目转换为Kotlin后,我无法构建发布版本,错误似乎与Proguard有关.

我看到155个警告

Warning:com.example.app.activity.MainActivity$1: can't find referenced field 'android.view.View decorView' in program class com.example.app.activity.MainActivity
Warning:com.example.app.activity.MainActivity$2: can't find referenced field 'android.os.Handler handler' in program class com.example.app.activity.MainActivity
Run Code Online (Sandbox Code Playgroud)

并且构建失败了

Error:Execution failed for task ':MyApp:transformClassesAndResourcesWithProguardForFreeRelease'.
> Job failed, see logs for details
Run Code Online (Sandbox Code Playgroud)

如果我将build.grade中的这些指令从true更改为false,则构建成功.

minifyEnabled true
shrinkResources true
Run Code Online (Sandbox Code Playgroud)

关于问题可能是什么的任何建议?

编辑:

proguard文件如下:

ProGuard的-android.txt

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

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose

# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize and preverify steps …
Run Code Online (Sandbox Code Playgroud)

android proguard kotlin android-proguard

13
推荐指数
1
解决办法
1395
查看次数

Android Cling/Upnp proguard

我已经使用Cling创建了应用程序并且工作正常但是当我创建发布版本时,我得到以下消息并且渲染器上没有任何内容:

   11-22 16:24:53.341  20172-20172/? I/RendererCommand? TrackMetadata : TrackMetadata [id=1, title=IMG-20151120-WA0007, artist=, genre=, artURI=res=http://192.168.1.4:8089/1.jpg, itemClass=object.item.imageItem]
11-22 16:24:53.345  20172-20172/? V/RendererCommand? Resume
11-22 16:24:53.351  20172-20301/? W/RendererCommand? Fail to stop ! Error: Current state of service prevents invoking that action. Error writing request message. Can't transform message payload: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType. (HTTP response was: 500 Internal Server Error)
11-22 16:24:53.351  20172-20301/? I/RendererCommand? Set uri to http://192.168.1.4:8089/1.jpg
11-22 16:24:53.353  20172-20386/? D/RendererCommand? Update state !
11-22 16:24:53.354  20172-20264/? W/RendererCommand? Fail …
Run Code Online (Sandbox Code Playgroud)

android upnp android-cling android-proguard

12
推荐指数
1
解决办法
973
查看次数

Proguard minifyEnabled对于调试构建是真的,不适用于前Lollipop

我的应用程序的方法计数高于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)

android android-studio android-proguard

11
推荐指数
1
解决办法
7669
查看次数