????cordova项目完成之后,上面测试提出了一个优化,就是要求打包成安卓spk的时候要代码混淆。
????对于web前端来说,代码混淆是从未听说过的,代码混淆是什么?由于Android项目是基于java语言的,而java属于高层抽象语言,易于反编译,其编译后的程序包包含了大量的源代码变量、函数名、数据结构等信息,根据其编译打包后的APK文件,可以非常容易的得到 近乎源代码质量 的反编译代码。如果不加混淆,相当于直接将源代码拱手送人,内容严密的app权限审核可以说是形同虚设。如果大家想避免自己的成果被别人夺取,然后重新修改策划而额外增加的工作量,那就尽量得自己的Android项目加上混淆吧??梢运?,代码混淆就相当于前端的打包过程中的代码压缩一样。
? ??对cordova项目进行混淆会导致插件无法调起。解决办法是:
????不混淆cordova相关代码,并在proguard文件中添加如下命令:
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
如果上面的目录没有找到,就尝试着在android平台根目录下寻找一个文件project.properties
引用别人的配置,来看一看。
相关的proguard的配置解释
-dontwarn 缺省proguard 会检查每一个引用是否正确,但是第三方库里面往往有些不会用到的类,没有正确引用。如果不配置的话,系统就会报错。-keep 指定的类和类成员被保留作为 入口 。
-keepclassmembers 指定的类成员被保留。
-keepclasseswithmembers 指定的类和类成员被保留,假如指定的类成员存在的话
保留选项?
-keep {Modifier} {class_specification} ????;ぶ付ǖ睦辔募屠嗟某稍?
-keepclassmembers {modifier} {class_specification} ????;ぶ付ɡ嗟某稍?,如果此类受到保护他们会?;さ母?/p>
-keepclasseswithmembers {class_specification} ????;ぶ付ǖ睦嗪屠嗟某稍保跫撬兄付ǖ睦嗪屠喑稍笔且嬖?。?
-keepnames {class_specification} ????;ぶ付ǖ睦嗪屠嗟某稍钡拿疲ㄈ绻遣换嵫顾醪街柚猩境?
-keepclassmembernames {class_specification} ???保护指定的类的成员的名称(如果他们不会压缩步骤中删除)?
-keepclasseswithmembernames {class_specification} ????;ぶ付ǖ睦嗪屠嗟某稍钡拿?,如果所有指定的类成员出席(在压缩步骤之后)?
-printseeds {filename} ???列出类和类的成员-keep选项的清单,标准输出到给定的文件?
压缩
?-dontshrink ???不压缩输入的类文件?
-printusage {filename}?
-whyareyoukeeping {class_specification} ????
优化?
-dontoptimize ???不优化输入的类文件?
-assumenosideeffects {class_specification} ???优化时假设指定的方法,没有任何副作用?
-allowaccessmodification ???优化时允许访问并修改有修饰符的类和类的成员?
混淆?
-dontobfuscate ???不混淆输入的类文件?
-printmapping {filename}?
-applymapping {filename} ???重用映射增加混淆?
-obfuscationdictionary {filename} ???使用给定文件中的关键字作为要混淆方法的名称?
-overloadaggressively ???混淆时应用侵入式重载?
-useuniqueclassmembernames ???确定统一的混淆类的成员名称来增加混淆?
-flattenpackagehierarchy {package_name} ???重新包装所有重命名的包并放在给定的单一包中?
-repackageclass {package_name} ???重新包装所有重命名的类文件中放在给定的单一包中?
-dontusemixedcaseclassnames ???混淆时不会产生形形色色的类名?
-keepattributes {attribute_name,...} ????;じǖ目裳∈粜裕鏛ineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and InnerClasses.?
-renamesourcefileattribute {string} ???设置源文件中给定的字符串常量
如上所述,我们在自己的cordova的android项目中,需要什么就在proguard.txt文件中去专门配置什么。
最后再次打包apk就ok了
cordova build android # debug版本
cordova build android --release? # 发行版