×

深圳网站建设—APP开发—网站制作—小程序开发_博纳网络公司

0755 -
82538016
82560826
网站制作资讯

安卓APP项目开发关于ProGuard指令介绍

文章编辑:网站建设 文章来源:APP开发 浏览量:

  安卓APP开发项目制作时我们要注意对APP进行混淆时,深圳APP开发公司整理常用的指令有以下几个。
#混淆后的类名不使用大小写混合,只用小写
-dontusemixedcaseclassnames
#指定不去忽略非公共库的类
-dontskipnonpubliclibraryclasses
#不做预校验,AndroidAPP不需要preverify,去掉这一步能够加快混淆速度
-dontpreverify
#指定在处理过程中写出更多信息。如果程序以一个异常终止,则此选项将打印整个堆栈跟踪,而不只是异常消息。
-verbose
#指定在更细粒度级别启用和禁用的优化
-optimizations
#编译时,忽略针对某些类的警告信息
-dontwarn
#类和类成员都不做混淆处理
-keep
#类成员不做混淆处理
-keepclassmembers
#某些属性不做混淆处理
-keepattributes
开发APP时ProGuard注意事项
  在混淆配置文件中,如果使用了-keep指令,最好同时使用-dontwarn指令,否则可能会因为出现warning导致编译出错。以下两个指令最好也要使用上,否则APP崩溃后,出错信息里没有行号,不方便分析解决问题。
-renamesourcefileattributeSourceFile
-keepattributesSourceFile,LineNumberTable
  混淆功能通常配置是在编译Release版本时生效,而开发人员通常只编译Debug版本,这往往会导致在开发人员本机能够正常编译,在编译服务器编译Release版本时因为没有正确配置混淆而出错。
  在向代码服务器提交代码前,开发人员最好在本机也编译下Release版本,这样可以提前发现此类问题,避免服务器编译出错。有时会遇到Release版本有某个问题,但Debug版本没有这个问题的情况,是由于Release版本编译时修改了类名、方法名和变量名,在运行时找不到对应的名称,导致出错。解决这样的问题,需在混淆文件中做如下类似配置。
-keep class com. google. protobuf.** {*;}
  如果有类是通过反射来使用的、应用调用的方法来自Java原生接口(JNI)或应用引用的类只来自AndroidManifest.xml文件时,也需要用-keep指令,指定对相关的类不做混淆处理。如下代码列出了APP中通常不需要混淆的一些内容。
-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, android. util. AttributeSet, 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>; }
好了,APP开发公司本文关于“安卓APP项目开发关于ProGuard指令介绍
”以及解决方法就分享到这里,谢谢关注,博纳网络编辑整理。

当前文章链接:/construction/appkaifa/2704.html
如果您觉得案例还不错请帮忙分享:

[声明]本网转载网络媒体稿件是为了传播更多的信息,此类稿件不代表本网观点,本网不承担此类稿件侵权行为的连带责任。故此,如果您发现本网站的内容侵犯了您的版权,请您的相关内容发至此邮箱【qin@198bona.com 】,我们在确认后,会立即删除,保证您的版权。