微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

混淆混淆

如何解决混淆混淆

好的,我在 Android Studio 中使用 Java 构建了一个应用程序。 它正在使用 Knox,我尝试使用 ProGuard 对其进行混淆,并且在很长一段时间之后我设法做到了。 我并没有真正“管理”我添加

-忽略警告

到 .pro 文件以使其工作。我意识到这不是解决方案,但就目前而言,我似乎无法找到解决方法。我要么收到以下错误

警告:有 3296 个未解析的类或接口引用。 您可能需要添加缺少的库 jar 或更新它们的版本。 如果您的代码在没有缺少类的情况下运行良好,您可以取消

如果我使用

构建应用程序,我认为这来自混淆过程

minifyEnabled 假

它工作正常。我尝试使用 -keep 函数,但我不知道如何使用,我尝试了以下操作:

对于警告线:

Warning: com.samsung.android.knox.ucm.core.UniversalCredentialUtil: can't find referenced class com.sec.enterprise.knox.ucm.core.UniversalCredentialUtil

我试过了:

-保持类 com.samsung.android.knox.ucm.core.UniversalCredentialUtil.**

但我还是遇到了同样的错误。 我试过了:

-keep class com.samsung.android.knox.ucm.core.UniversalCredentialUtil.** { *; }

但还是同样的错误。 我也试过:

-keep class com.samsung.android.knox.ucm.core.** { *; }

-保持类com.samsung.android.knox.ucm.core.**

但无济于事。

我尝试从 proguard 中取出整个罐子:

    -injars      bin/knoxsdk.jar

-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.broadcastReceiver
-keep public class * extends android.content.ContentProvider

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context,android.util.AttributeSet);
    public <init>(android.content.Context,android.util.AttributeSet,int);
    public void set*(...);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context,android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context,int);
}

-keepclassmembers class * extends android.content.Context {
   public void *(android.view.View);
   public void *(android.view.MenuItem);
}

-keepclassmembers class * implements android.os.Parcelable {
    static ** CREATOR;
}

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

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

但我得到以下信息:

相同的输入 jar [...\app\libs\knoxsdk.jar] 被指定了两次。 即使我不知道它在哪里指定。

无论如何,在使用上面提到的 -ignorewarnings 之后,我已经设法创建了一个 APK。我尝试使用 dex2jar 检查它,但在反编译它时遇到了问题。尽管如此,我已经尝试将它放在我的设备上,它安装正确,但它引发了异常:

setUsbConnectionType(int) method from a.b.a.a.b.d class is only supported from API level 20 and above (current is 0)

我意识到 setUsbConnectionType 是一个 Knox 函数,但是,为什么我得到当前 API 为 0?

所以基本上,tl;dr:

  1. 当我的项目中有 knox jar 时,如何使用 ProGuard 正确混淆我的代码。 或
  2. 如何修复此 API 错误

谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。