我正在从事的项目围绕180k方法.我已经阅读了博客和文章,其中写着,如果您将Min SDK设置为21,那么您就不需要MultiDex.但是,如果我从这里删除MultiDex,它会给我65k MultiDex错误消息.以下是我的gradle文件.我不知道我是不了解这个概念还是其他东西.请指导我. compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId 'com.myapp.app' minSdkVersion 21 targetSdkVersion 23 versionCode 59 versionName "1.0.1" multiDexEnabled true ndk { abiFilters "armeabi", "armeabi-v7a", "x86" } } dexOptions { j
以下是关于 proguard 的编程技术问答
我们如何在Android项目中添加R8规则,以供依赖项,并将其排除在minifing和obfuscate中的文件和软件包?. 解决方案 添加R8规则类似于Progurad规则,但是某些依赖项不需要在R8中添加规则,因此可以在文档中提到.来自Android Studio 3.4 R8是默认代码收缩. 在 build.gradle 应用程序模块中添加此行 buildTypes { release { minifyEnabled true //Important step shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 选择proguard-rules.pro 添加规则以排除软件包或文件 -keep class com.xyz.mo
是否有人有使用 proguard ,并且是否已经有关于课堂加载时间以外的应用程序性能的测量值? 我有一个相当复杂的应用程序,可能需要提升,但是为proguard做准备将需要几天,所以我想听听一些意见. 解决方案 我们的经验,主要好处是它可以保护您的智力权利.就课堂加载时间而言,我们不一定会看到任何好处,如果这样可以忽略不计. 另一件事是,我们已经看到了可能对您的代码产生负面影响的问题.当然,使用Proguard后重新测试您的申请. 其他解决方案 proguard确实确实通过任何主流JVM的JIT进行的大多数字节码优化都一样,因此对于那些不应该指望的是显着改进(除课堂加载外). > 其他解决方案 我只能做一个疯狂的猜测. PRO:混淆和较短的方法名称/字段名称在字节代码验证,类加载和解释模式中使其略快. 缺点:一旦运行一段时间,它将或多或少地编译了JIT,到那时不再重要.
我将在应用程序中使用非常敏感的数据.根据我的定义,混淆并没有增加安全性,它只会在有限的时间内延迟饼干. Proguard是否有可能这样做,可以称为增加的安全性? 最敏感的是某些网络调用.很难嗅到密码,因为我们将在双方生成密码,并使用时间戳检查其有效性.问题是该应用程序可能会进行逆向工程,并且可以利用生成算法. 不可能将算法保存在文件中,因为使用扎根手机,饼干可能能够检索它.从服务器下载算法无效,因为在此处适用同样的问题,如果饼干反向工程师该应用程序他/她将能够查看从何处获取算法. 对如何进行的任何输入都非常感谢! 编辑 我要保护的是生成算法,因此饼干可能不会向我们的服务器发送很多数据. 解决方案 通常,您可以使饼干更加艰难.您做得越难,剩下的就越少.特别是如果经济激励受到限制. 您的代码混淆选项是: 使用proguard,它做得很好,当然不是完美的,但是很好 使用Dexguard,它可以使反向工程变得更加困难,例如 通过加密字符串或检测
我在应用程序中使用parse.com功能,在调试模式下一切都很好. 一旦我在发布模式下生成签名的APK,我就会在打开应用程序开始时有时候等待10秒钟. 很可能是因为Parse.com试图初始化和联系其服务器,这显然没有成功. ,而且,parse.com停止工作,我知道,因为没有任何数据上传到我的帐户中. 当然,proguard应该有一个问题,因为在我的情况下,调试模式和释放模式之间的唯一区别正在使proguard. . 我也有triend以保持com.parse在我的前进规则中以下代码: #keep parse classes -keepattributes Annotation,SourceFile,LineNumberTable -dontwarn com.parse.** -keep class com.parse.* { *; } -keep class com.parse.** { *; } 任何帮助将不胜感激! 编辑: 我发现parse
[2014-07-15 23:57:43 - MozMeet] Proguard returned with error code 1. See console [2014-07-15 23:57:43 - MozMeet] Note: there were 662 duplicate class definitions. [2014-07-15 23:57:43 - MozMeet] Warning: com.parse.FacebookAuthenticationProvider$1: can't find superclass or interface com.facebook.android.Facebook$ServiceListener [2014-07-15 23:57:43 - MozMeet] Warning: com.parse.FacebookAuthenticationProvider$2: can't find superclass or interface c
我正在使用Realm和Parceler,一切正常,但是当我启用Proguard时,我会在这样做时遇到错误: Parcels.wrap(obj) 我会收到以下错误: org.parceler.ParcelerRuntimeException: Unable to find generated Parcelable class for io.realm.g, verify that your class is configured properly and that the Parcelable class io.realm.g$$Parcelable is generated by Parceler. 尽管我已经配置了诸如: 的proguard规则 ##---------------Begin: proguard configuration for realm ---------- -keep class io.realm.annotations.RealmMod
我的应用在混淆之前正常工作,但是当我启用proguard时,我会收到以下错误: 2013-05-02 13:43:58.772 E 30138/AndroidRuntime: FATAL EXCEPTION: main java.lang.NumberFormatException: Invalid long: "0.20" at java.lang.Long.invalidLong(Long.java:125) at java.lang.Long.parse(Long.java:362) at java.lang.Long.parseLong(Long.java:353) at java.lang.Long.parseLong(Long.java:319) at com.sourcetone.data.model.Station.long getId()(SourceFile:195) at com.sourcetone.STSta
我的项目有很少的课程,可以扩展 parcelcelable . 我需要在混淆时将它们"保留"在前进规则中. 包裹的一般实践是什么? 解决方案 否,默认的Android规则包括以下内容: -keepclassmembers class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator CREATOR; } 如果您将默认生成的gradle定义定义为 ,将应用这些默认规则 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 其他解决方案 如果您使用的是kotlin @Parcelize proguard,则可以将其添加到proguard-rules.pro: -keep @kotlinx.android.parcel
当我从调试中运行项目时,一切都很好.但是,当我使用Android Studio(使用Proguard)生成的签名APK运行它时,我在使用GetParcelable时会遇到以下错误: java.lang.RuntimeException: Unable to start activity ComponentInfo{mypackage.android/mypackage.mobile.android.activities.searchActivity}: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class mypackage.android.a.d.a 为什么只有我的签名APK才会发生这种例外?在我的proguard配置文件中,我确实必须使用dontwarn android.support.v4.**
我已经启用了Proguard并配置了规则 minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 对于gson,我使用了这些规则规则 将我的模型添加到异常(-keep class my.package.model.** {*;}) 还为各种库使用了其他规则 我有此错误 - >在此类型的GSON上注册InstanceCreator可能会解决此问题. 切换到Kotlin 1.6.0和1.6.10时发生错误. 版本Kotlin 1.5.21! 没有错误 错误(我仅在Kotlin 1.6.0/1.6.10上有一个错误.Kotlin 1.5.21上没有错误)----> > E/Android
当我使用Ormlite在项目上使用Proguard时.我收到这个错误: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.package.name/com.package.name.activities.StartActivity}: java.lang.IllegalStateException: Could not find OpenHelperClass because none of the generic parameters of class class com.package.name.activities.StartActivity extends OrmLiteSqliteOpenHelper. You should use getHelper(Context, Class) instead. 我已经尝试了 proguard with android上的proguar
我有一些我想在代码中混淆的模型. 我知道我可以忽略整个模型包,但我不想这样做. 我尝试了一些逐步调整,并检查了所有相关帖子,但无济于事. Ormlite不断投掷java.lang.RuntimeException: Unable to create application ...App: java.lang.IllegalArgumentException: Foreign field class ....f.p does not have id field.我检查了注释仍然存在 dex2jar 和 jd ,它仍然存在. 我有这种前进配置(还有更多使其他部分相处的): 激进的东西: -mergeinterfacesaggressively -allowaccessmodification -optimizationpasses 5 -verbose -dontskipnonpubliclibraryclasses -dontpreverify -optimizatio
我正在使用Android Studio开发一个应用程序,当我从 debug 切换到版本 build build variant时,它开始崩溃.在调试时,它根本没有发生任何事情.真正的问题是我找不到真正错误的位置,因为每个参考都被重命名. 您是否遇到了这样的错误,这种错误仅在版本? 上发生 打印的堆栈是: 04-11 08:28:42.756 5997-5997/com.korcholis.clothio E/ActivityThread﹕ Failed to inflate android.view.InflateException: Binary XML file line #10: Error inflating class fragment at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) at androi
我应该如何将proguard与Android上的Ormlite库一起使用? 尝试这个: -keep class com.j256.** -keepclassmembers class com.j256.** -keep enum com.j256.** -keepclassmembers enum com.j256.** -keep interface com.j256.** -keepclassmembers interface com.j256.** 但我得到: 03-23 20:23:54.518:e/androidruntime(3032):java.lang.runtimeException:无法启动活动componentInfo {cz.eman.android.cepro/cz.eman/cz.eman.android.android.android.cepro.cepro.cepro.cepro.activity.stationsoctivity.s
我在我的应用中写-assumenosideeffects class android.util.Log.但是如何使用此. -assumenosideeffects class android.util.Log { public static int d(...); public static int v(...); public static int i(...); public static int e(...); } in proguard.cfg文件.但不工作. 解决方案 手册说说-assumenosideffects> -assumenosideffects>是"仅在优化时适用" . ${sdk.dir}/tools/proguard/proguard-android.txt说:"默认情况下关闭了优化.DEX不喜欢通过Proguard Optimize和Preverify步骤运行的代码" . /04/assumeno
Android的官方 proguard文档显示两个主要优化: set minifyEnabled to true 使用proguard-android-optimize.txt 而不是proguard-android.txt 这两个是最激进的设置吗? 我正在编写一个Android库,并且需要确保人们何时使用我的库,以免我的代码破裂. (我知道我可以在库中放置一些规则,以对抗使用该库的应用程序设置的Proguard配置,但是如果我不需要,我不想这样做.) 解决方案 请记住,最好的Proguard配置 - 是一种配置,最少有例外. 在我了解的例外: -keepclassmembers class * extends android.content.Context { public void *(android.view.View); public void *(android.view.MenuItem); } 让我们走过progua
我正在尝试使用MS Windows桌面应用程序处理(使用Eclipse提供的SWT Lib).我会收到以下关键错误: Unexpected error while performing partial evaluation: Class = [org/eclipse/swt/widgets/DateTime] Method = [(Lorg/eclipse/swt/widgets/Composite;I)V] Exception = [java.lang.IllegalArgumentException] (Can't find common super class of [java/lang/StringBuffer] and [org/eclipse/swt/internal/win32/TCHAR]) Error: Can't find common super class of [java/lang/StringBuffer] and [org/eclipse/
我看到了一些无法解释的前卫行为. Afaik Proguard不关注Android表现.另外,在我的proguard.cfg中,我没有提及广播相关的类别.所以我认为应该剥离这些. 但是,我在bin/proguard.txt中看到了奇怪的东西: # view AndroidManifest.xml #generated:784 -keep class com.fiksu.asotracking.InstallTracking { (...); } 和该类(Broadcastreceiver的Descendand)不会被剥夺.原因对我没有说明: [proguard] com.fiksu.asotracking.InstallTracking [proguard] is kept by a directive in the configuration. 如果在清单中未提及课程,则将被剥离. 很高兴知道为什么. 解决方案 构建过程运行
在我的Android项目中,我有一些存储在res/drawable/访问的图像仅从加载WebView中的HTML文件中仅 .例如(html中的代码): 在优化期间,通过APK从APK中删除这些图像. 有人知道一种保留这些文件的方法(即使它们在Java代码中未直接使用)? 解决方案 我将图像移到了解决我的问题的"资产"文件夹中: 其他解决方案 我也有类似的问题,只想添加几个位. 资源并未被前卫所剥夺. 如果您只是解压缩APK,您将看到图像文件仍然存在. 问题是Webkit Fileloader将尝试使用反射加载R $ Drawable类.如果您不在proguard.cfg文件中添加任何保留规则,则可以重命名,因此WebKit将无法加载您的资源.