我假设我不能混淆gson POJO.如果我这样做,那么gson不能做对象映射并将json反序列化为POJO,对吗?有没有办法混淆POJO呢?另外请告诉我,如果我的想法是正确的,那么不应该混淆POJO,如果是这样的话,那将是什么样的命令来保留所有的pojos.
我使用 bugsnag 来监控 Android 应用程序中的崩溃情况。我在编译发行版本时也使用 ProGuard。我需要上传在项目的build/outputs/mapping/prod/release 文件夹中生成的mapping.txt 文件。
当我在(Windows)命令行中运行此命令时:
curl https://upload.bugsnag.com -F proguard=@C:/mapping.txt -F apiKey=1111111111111111111111 -F versionCode=11111111 -F appId=com.my.package -F versionNumber=1.0.0
Run Code Online (Sandbox Code Playgroud)
文件已上传,一切正常。
我所需要的只是向 gradle 添加一个任务,以便它在准备好后上传文件。因此,一旦我编译了要发布的项目,mapping.txt 文件就会生成,一旦准备好,就使用这个curl 命令上传该文件(顺便说一下,该命令取自bugsnag 的网站)。
我尝试了很多变化。当前的文件可以编译,但我不认为该文件正在上传......我看不到任何迹象表明它确实发生了。这是我当前使用的代码:
task uploadPro(type: Exec) {
logger.error("inside upload task")
commandLine 'cmd', '/c', 'curl', 'https://upload.bugsnag.com', '-F','proguard=@build/outputs/mapping/prod/release/mapping.txt', '-F', 'apiKey=1111111111111111111111', '-F', 'versionCode=111111', '-F', 'appId=com.my.package', '-F', 'versionNumber=1.0.0'
standardOutput = new ByteArrayOutputStream()
doLast {
String output = standardOutput.toString()
logger.info(output);
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用这个:
def p = ['cmd', '/c', 'curl', 'https://upload.bugsnag.com', '-F', 'proguard=@build/outputs/mapping/prod/release/mapping.txt', '-F', 'apiKey=11111111111111111111111', '-F', 'versionCode=1111111', '-F', …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Proguard,并在我的应用程序中使用此代码
System.out.println("ACTIVITY NAME IS " + activity.getLocalClassName());
Run Code Online (Sandbox Code Playgroud)
它在释放模式下打印出活动名称。我认为它应该混淆所有类名?
这种行为正常吗?
请帮忙,
这是我第一次使用android studio生成发布APK,尝试了几天后,我可以签署我的项目但是当我安装apk时我总是得到这个错误 ..
7290-7290/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.enma.app, PID: 7290
java.lang.NoSuchFieldError
at libcore.reflect.AnnotationAccess.decodeValue(AnnotationAccess.java:688)
at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:663)
at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:641)
at libcore.reflect.AnnotationAccess.getDeclaredAnnotation(AnnotationAccess.java:171)
at libcore.reflect.AnnotationAccess.getAnnotation(AnnotationAccess.java:72)
at java.lang.Class.getAnnotation(Class.java:359)
at com.c.a.c.f.al.<clinit>(Unknown Source)
at com.c.a.c.f.al.a(Unknown Source)
at com.c.a.c.z.<clinit>(Unknown Source)
at com.zopim.android.sdk.data.Parser.<init>(Unknown Source)
at com.zopim.android.sdk.data.Path.<init>(Unknown Source)
at com.zopim.android.sdk.data.ConnectionPath.<init>(Unknown Source)
at com.zopim.android.sdk.data.ConnectionPath.<clinit>(Unknown Source)
at com.zopim.android.sdk.data.PathDataSource.<init>(Unknown Source)
at com.zopim.android.sdk.api.ZopimChat.<clinit>(Unknown Source)
at com.enma.app.MyApp.onCreate(Unknown Source)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1018)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4914)
at android.app.ActivityThread.-wrap1(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1526)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5683)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
Caused by: …
Run Code Online (Sandbox Code Playgroud) android apk android-studio android-gradle-plugin android-proguard
我的代码可以编译并且可以在调试模式下正常运行,但是一旦我使用了带有minifyEnabled true的构建配置,就会收到以下警告,它们会阻止编译:
警告:有100个未解决的对类或接口的引用。
警告:有2个未解决的对程序类成员的引用。
出于可读性考虑,我将在底部包括完整的输出。有两个导致这些警告的库,springframework和jackson。这些库通过gradle包含在我的项目中,如下所示:
compile 'com.fasterxml.jackson.core:jackson-annotations:2.8.5'
compile 'com.fasterxml.jackson.core:jackson-core:2.8.5'
compile 'com.fasterxml.jackson.core:jackson-databind:2.8.5'
apt "org.androidannotations:rest-spring:$AAVersion"
compile "org.androidannotations:rest-spring-api:$AAVersion"
compile 'org.springframework.android:spring-android-rest-template:2.0.0.M3'
Run Code Online (Sandbox Code Playgroud)
如果我对这两个库都使用-dontwarn,就像许多人对这类问题的建议那样,则该应用程序可以编译,但在启动过程中会由于混淆的崩溃日志而崩溃-我尝试使用映射文件对其进行跟踪,但这都不起作用-我为了合理地确定应用程序在初始化杰克逊映射类时由于自动生成的(通过android注释)类RestClient_而崩溃,例外情况如下:
java.lang.NoSuchFieldError:没有类型为Lcom / myapp / app / mv $ a的静态字段PUBLIC_ONLY;在Lcom / myapp / app / mv $ a类中;或其超类(在/data/app/com.myapp.app-1/base.apk中显示“ com.myapp.app.mv $ a”的声明)
尽管在其他电话上,该异常没有消息。很明显,这是proguard的结果。
我的完整proguard文件可以在这里找到https://gist.github.com/Syzygy2048/02a44032611d40720bad36b5e3b37db6
这是我已经尝试过的几件事(我尝试了更多,但过一会儿才开始写下来)。尝试着重于首先固定弹簧框架。(必须将其概括为要点,因为stackoverflow不会让我发帖)
https://gist.github.com/Syzygy2048/f1bdabc9f2ea091aa8faec67c62dd8bb
完整的错误日志:
simpleframework.xml.Serializer警告:有100个未解决的对类或接口的引用。警告:有2个未解决的对程序类成员的引用。警告:处理任务java.io.IOException时发生异常:请首先更正以上警告。错误:任务':myappApp:transformClassesAndResourcesWithProguardForMyappPublicRelease'的执行失败。作业失败,请参阅日志以获取详细信息信息:构建失败信息:总时间:23.68秒信息:1错误信息:59警告信息:请参阅控制台中的完整输出 请首先更正以上警告。错误:任务':myappApp:transformClassesAndResourcesWithProguardForMyappPublicRelease'的执行失败。作业失败,请参阅日志以获取详细信息信息:构建失败信息:总时间:23.68秒信息:1错误信息:59警告信息:请参阅控制台中的完整输出 请首先更正以上警告。错误:任务':myappApp:transformClassesAndResourcesWithProguardForMyappPublicRelease'的执行失败。作业失败,请参阅日志以获取详细信息信息:构建失败信息:总时间:23.68秒信息:1错误信息:59警告信息:请参阅控制台中的完整输出
我想在我的库上使用proguard,但文件(规则)应该在库中设置.这意味着我不想在我的app模块中明确设置规则w(属于库).
我发现有类似consumerProguardFiles的属性.我的设置:
库gradle:
buildTypes {
debug {
debuggable true
minifyEnabled false
}
release {
minifyEnabled true
consumerProguardFiles 'proguard-rules.pro'
}
}
Run Code Online (Sandbox Code Playgroud)
app gradle:
buildTypes {
debug {
applicationIdSuffix ".debug"
debuggable true
minifyEnabled false
signingConfig signingConfigs.debug
}
release {
debuggable false
minifyEnabled true
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Run Code Online (Sandbox Code Playgroud)
为什么上面的配置不起作用?我收到错误,无法找到库中的包/符号.
编辑:
重要的是我的proguard-rules.pro用于库和proguard-rules.pro用于主应用程序模块都是空的.
示例错误:
Error:(3, 60) error: package (my library package here) does not exist
(...)
Error:(16, 9) error: cannot find symbol class NavigationStructureModel
(...)
Run Code Online (Sandbox Code Playgroud)
超过一个handrued错误.我可以看到我的库中的所有课程都丢失了.
android proguard android-library android-studio android-proguard
在Xamarin.Forms
项目中,我添加了ModernHTTPClient
库,现在ProGuard步骤因错误而中断:
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.
(以前,我在使用ProGuard时遇到了一些问题,但是通过将ProGuard升级到最新版本,能够在定位Android 7.1时使其正常工作。)
日志文件中的一些详细信息如下。
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> …
Run Code Online (Sandbox Code Playgroud) proguard xamarin xamarin.forms android-proguard visual-studio-2017
文档不够清楚,无法解释这一点。
-keepnames
类_规范简称
-keep,allowshrinking
class_specification指定名称要保留的类和类成员,如果它们在收缩阶段没有被删除。例如,您可能希望保留实现 Serializable 接口的类的所有类名,以便处理后的代码与任何最初序列化的类保持兼容。仍然可以删除根本不使用的类。仅在混淆时适用。
请任何人都可以解释一下keepnames 属性。这将只保留类名还是类的所有成员和方法。请为我提供一种仅保留类名而不是类的所有方法和成员的方法。
抱歉英语不好。我以为我清楚地解释了我的问题。
我不能使用
implementation 'de.mrmaffen:libvlc-android:2.1.12@aar'
Run Code Online (Sandbox Code Playgroud)
如果设置minifyEnable
为true
.
错误信息是
无法加载 vlcjni 库:java.lang.UnsatisfiedLinkError:从“/data/app//lib/arm64/libvlcjni.so”中的 JNI_OnLoad 返回 JNI_ERR
如何minifyEnable true
与libvlc一起使用?
我正在com.google.android.gms:play-services-ads
从 15.0.1更新到 17.1.1,尝试运行应用程序时出现以下错误:
如果曾经调用过,则必须在 [proguard.classfile.editor.AttributeAdder] 中覆盖方法
当我回到 15.0.1 时一切正常。当我禁用 Proguard 时一切正常。
我不知道这个错误是关于什么的,在一些似乎不再适用的古老问题中偶尔会提到它。
编辑:我找到了一种解决方法 - 添加-optimizations !class/merging/*
到我的 proguard 中,但我仍然希望它按照预期的方式工作。