Articles of prouard

如何阻止ProGuard从类中剥离Serializable接口

有没有明确的方法阻止ProGuard从实现接口改变类? 我有一个类实现java.io.Serializable ,我们称之为com.my.package.name.Foo 。 我发现在运行ProGuard之后,它不再实现Serializable 。 我从Serializable到Foo后得到null ,如果我使用instanceof Serializable的instanceof检查实例,则返回false 。 我已经确定设置ProGuard忽略这个类: -keep class com.my.package.name.Foo 我也试过: -keep class com.my.package.name.Foo { *; } 而且我也是这样做的整个包裹: -keep class com.my.package.name.** { *; } 要么: -keep class com.my.package.** { *; } 也只是为了保持所有的Serializable类: -keep class * implements java.io.Serializable { *; } 但无济于事。 我有一个兄弟软件包中的另一个类(粗略地: com.my.package.name2.Bar ),它也实现了Serializable ,并且使用类似但没有问题。 我不确定这是相关的,但我打包在一个jar子用于Android。 使用这些类的代码包括将它们放在Bundle ,这就是为什么我需要Serializable 。 我认为也许不知何故ProGuard认为Foo从来没有用作Serializable但是这似乎不太可能,因为我把它作为parameter passing给Bundle.putSerializable(String, […]

签署apk获得在proguard启用坠毁

我正在尝试在我的应用程序中使用proguard设置proguard为true,然后问题开始我正在导入lib当我使用proguard跟随这个 -keepnames class com.somepackage.*与我的包名称应用程序越来越崩溃时,我尝试使用已签名的apk。 我知道这是一个愚蠢的问题,但我坚持在这最后5小时不能find一个简单的解决scheme,因为我使用约20库。 我也跟着这个 。 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 我现在无法生成任何已签名的apk。 错误是。 Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'. 作业失败,请参阅日志了解详情 任何提示将有所帮助。 控制台输出 FAILURE: Build failed with an exception. 出了什么问题:执行任务':app:transformClassesAndResourcesWithProguardForRelease'失败。 作业失败,请参阅日志了解详情 尝试:运行–stacktrace选项来获取堆栈跟踪。 运行–info或–debug选项来获得更多的日志输出。 编辑build.gradle apply plugin: […]

生成安全签名APK时出现Proguard错误

我一直试图从最后2天生成安全签名的apk为我的应用程序,但仍然没有得到任何成功。 我已经检查了很多StackOverflow的答案,并尝试了每个解决scheme,但没有为我工作。 所以在这里,如果任何人都可以帮助我,这将是真正的感激,并会真正感谢帮助。 下面是我正在生成安全签名apk的错误。 编辑: 我在我的proguard文件中有一些变化,现在我正在获取下面的错误 Proguard returned with error code 1. See console Note: there were 209 duplicate class definitions. You should check if you need to specify additional program jars. Unexpected error while evaluating instruction: Class = [android/support/v4/view/AccessibilityDelegateCompat$AccessibilityDelegateJellyBeanImpl] Method = [newAccessiblityDelegateBridge(Landroid/support/v4/view/AccessibilityDelegateCompat;)Ljava/lang/Object;] Instruction = [18] areturn Exception = [java.lang.IllegalArgumentException] (Can't find any super classes […]

Proguard和RecyclerView项目装饰

使用ItemDecoration for RecyclerView元素时遇到了一些意外的行为。 在某些手机(三星Android 5设备)上,我的ItemDecoration没有显示何时应用了构build程序(minify true)。 没有proguard / minify它工作正常,你可以看到回收商元素之间的ItemDecoration。 在大多数手机上,问题不存在,您可以看到有或没有应用程序的项目装饰。 不知道那里发生了什么,但任何input赞赏。 项目装饰者代码: import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.View; public class DividerItemDecoration extends RecyclerView.ItemDecoration { private Drawable mDivider; public DividerItemDecoration(Context context) { mDivider = ContextCompat.getDrawable(context, R.drawable.line_divider); } @Override public void onDrawOver(Canvas canvas, RecyclerView parent, RecyclerView.State state) { int […]

在更新到支持工具之后,再次获取java.lang.NoClassDefFoundError:android.support.v7.internal.view.menu.i

我已经使用4.2.2手机实现了https://code.google.com/p/android/issues/detail?id=78377上列出的许多解决scheme之一,但现在我已经更新了支持工具23这个问题已经回来了。 如果你看看这个问题报告,你会看到有很多人在更新后遇到同样的问题。 NoClassDefFoundError:android.support.v7.internal.view.menu.MenuBuilder上的解决scheme也不起作用,因为它们来自https://code.google.com/p/android/issues/detail?id=78377 这是我得到的exception: java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.i at android.support.v7.widget.ActionMenuView.getMenu(ActionMenuView.java:643) at android.support.v7.widget.Toolbar.ensureMenu(Toolbar.java:876) at android.support.v7.widget.Toolbar.getMenu(Toolbar.java:847) at android.support.v7.internal.widget.ToolbarWidgetWrapper.getMenu(ToolbarWidgetWrapper.java:702) at android.support.v7.internal.app.ToolbarActionBar.getMenu(ToolbarActionBar.java:583) at android.support.v7.internal.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:441) at android.support.v7.internal.app.ToolbarActionBar$1.run(ToolbarActionBar.java:65) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776) at android.view.Choreographer.doCallbacks(Choreographer.java:579) at android.view.Choreographer.doFrame(Choreographer.java:547) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762) at android.os.Handler.handleCallback(Handler.java:800) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5391) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) at dalvik.system.NativeStart.main(NativeStart.java) 我的proguard有这样的: -keep class !android.support.v7.internal.view.menu.**,android.support.** {*;} 任何解决scheme 得到很多用户的投诉。

ProGuard可能导致错误的计算

我遇到了一个非常奇怪的错误。 下面的一小段代码使用一个相当简单的math。 protected double C_n_k(int n, int k) { if(k<0 || k>n) return 0; double s=1; for(int i=1;i<=k;i++) s=s*(n+1-i)/i; return s; } 编辑使用ProGuard可能会使某些设备出现问题。 我已经在HTC One S Android 4.1.1 build 3.16.401.8上得到确认,但通过电子邮件来看,很多Android 4+手机都受到了影响。 对于其中的一些(Galaxy S3),美国运营商品牌手机受到影响,而国际版本则不受影响。 许多电话不受影响。 下面是计算C(n,k)1 <= n <25和0 <= k <= n的活动代码。 在上面提到的设备上,第一次会话给出了正确的结果,但随后的发射显示不正确的结果,每次都在不同的位置。 我有3个问题: 怎么会这样? 即使ProGuard出了问题,设备和会话之间的计算也应该是一致的。 我们怎样才能避免呢? 我知道在这种情况下用long来代替double是可以的,但这不是一个通用的方法。 使用double或释放未混淆的版本丢弃是没有问题的。 哪些Android版本受到影响? 我在游戏中进行修复的速度很快,所以我只知道很多玩家已经看到了它,而且至less最有Android 4.0 溢出是没有问题的,因为有时我在计算C(3,3)=3/1*2/2*1/3看到错误。 通常不正确的数字从C(10,…)开始,看起来就像一个电话已经“忘记”做一些分裂。 我的SDK工具是22.3(最新的),我已经在Eclipse和IntelliJ […]

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

我正在开发SDK,我的环境有SDK库和一个使用它的testing项目。 我想保护我的图书馆的代码,我的图书馆用户,因为我需要混淆它,但只是它。 所以在我的库模块中的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 这些类被混淆了,但是它们的包没有被改变。 我restEric Lafortune (Proguard的作者)build议增加allowaccessmodification ,但它没有帮助。 我也尝试使用flattenpackagehierarchy ,但它没有效果。 帮帮我,如何把我所有的课程放在一个包里?

如何使org.apache.http.legacy与ProGuard(azure移动服务)协同工作?

问题: 我正在使用android移动服务,它依赖于androidhttpclient。 引用org.apache.http.legacy可以解决所有的问题,而且应用程序运行的很好。 然而,随着进步,我不断遇到问题。 问题在两种情况下发挥。 如果我保持导出checkbox被选中(在jave构buildpath中),我得到一个“Stub!” 如预期的exception(见下面的讨论)(请参阅我正在谈论的checkbox的截图) types为“Stub!”的运行时崩溃: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.stuffd/com.stuffd.MainActivity}: java.lang.RuntimeException: Stub! at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2345) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405) at android.app.ActivityThread.access$800(ActivityThread.java:149) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:211) at android.app.ActivityThread.main(ActivityThread.java:5317) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811) Caused by: java.lang.RuntimeException: Stub! at org.apache.http.message.AbstractHttpMessage.(AbstractHttpMessage.java:7) at org.apache.http.client.methods.HttpRequestBase.(HttpRequestBase.java:7) at org.apache.http.client.methods.HttpGet.(HttpGet.java:8) at com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.executeGetRecords(MobileServiceJsonTable.java:952) at com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.executeUrlQuery(MobileServiceJsonTable.java:183) at com.microsoft.windowsazure.mobileservices.table.MobileServiceJsonTable.execute(MobileServiceJsonTable.java:160) at […]

Android项目:导出问题启动取消! Proguard返回错误代码1.请参阅控制台

我在project.prperties中的下面一行没有注释 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 工作进展,它工作正常。 但是当我添加android-support-v4.jar库时,导出签名应用程序项目时出错 Launch canceled! Proguard returned with error code 1. See console Note: there were 316 duplicate class definitions. Warning: com.google.android.gms.common.images.ImageManager$a: can't find superclass or interface android.content.ComponentCallbacks2 Warning: com.google.android.gms.maps.MapFragment: can't find superclass or interface android.app.Fragment Warning: com.google.android.gms.common.GooglePlayServicesUtil: can't find referenced field 'int smallestScreenWidthDp' in class android.content.res.Configuration Warning: com.google.android.gms.common.images.ImageManager: can't find referenced method 'void […]

Proguardexception,同时创build释放Android的apk

我正在build立一个应用程序引擎连接Android项目使用Eclipse插件。 该项目工作正常,所以我决定是时候创build一个释放APK。 使用日食,我经历了这个过程。 但是,当我到达最后,我得到一个exception: Proguard returned with error code 1 。 我包括下面的整个日志。 我的GEP生成的项目带有两个与proguard相关的文件: proguard-google-api-client.txt和proguard-project.txt 。 还有一个名为proguard的项目,但它是空的。 project.properties文件中有两行 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt:proguard-google-api-client.txt target=android-17 请有人帮忙。 除了这些proguard错误,我的代码工作正常。 我在模拟器和真实设备上进行testing。 这从来没有停止过发展中的问题。 另外我的后端已经部署在应用程序引擎,我没有麻烦与我的开发API使用它。 经过一番阅读之后,我登陆了Eclipse如何在Android开发中使用它来检查/升级Proguard版本? 。 但是,当我手动更新从4.7到4.9的proguard,当我尝试导出apk时,我得到的Eclipse错误,它无法find文件android-sdk-macosx/tools/proguard/proguard-android.txt 。 编辑:基于我收到的反馈,我创build了一个名为proguard-mine.txt文件 -injars bin/classes -injars libs -outjars bin/classes-processed.jar -libraryjars /projects/tools/android-sdk-macosx/platforms/android-8/android.jar -dontpreverify -repackageclasses '' -allowaccessmodification -optimizations !code/simplification/arithmetic -keepattributes *Annotation* -keep public class * extends android.app.Activity -keep public class * […]