概述
问题
最近,在第三方集成我们的aar的时候,出现混淆后的文件,与他们项目引入的其他包名字冲突了。
解决方式
默认情况下,混淆后的名字一般为a、b、c、d以及它们的组合。通过修改混淆规则,控制混淆后的文件命名规则,从根本上避免与其他包可能出现同名的问题。具体步骤是需要在混淆规则文件proguard-rules.pro中做如下设置:
-obfuscationdictionary filename.txt
-classobfuscationdictionary filename.txt
-packageobfuscationdictionary filename.txt
- -obfuscationdictionary filename .txt:指定一个混淆类名、成员变量名、方法名的字典。
- -classobfuscationdictionary filename .txt:指定一个混淆类名的字典,字典的格式与-obfuscationdictionary相同;
- -packageobfuscationdictionary filename .txt:filename 指定一个混淆包名的字典,字典格式与-obfuscationdictionary相同。
filename.txt是用来指定混淆后生成的名字的字典文件,字典文件中的空格,标点符号,重复的词,还有以’#'开头的行都会被忽略。需要注意的是添加了字典并不会显著提高混淆的效果,添加字典有两个作用:一是避免与其他包混淆后重名;二是更不利与阅读;
与proguard-rules.pro同级目录下。
下面是字典的示例,建议可在每个关键字之前加上一些特殊的前缀,例如: xxdo、xxif
# 使用java中的关键字作字典:避免混淆后与其他包重名,而且混淆之后的代码更加不利于阅读
#
# This obfuscation dictionary contains reserved Java keywords. They can't
# be used in Java source files, but they can be used in compiled class files.
# Note that this hardly improves the obfuscation. Decent decompilers can
# automatically replace reserved keywords, and the effect can fairly simply be
# undone by obfuscating again with simpler names.
# Usage:
# java -jar proguard.jar ..... -obfuscationdictionary filename.txt
#
do
if
for
int
new
try
byte
case
char
else
goto
long
this
void
break
catch
class
const
final
float
short
super
throw
while
double
import
native
public
return
static
switch
throws
boolean
default
extends
finally
package
private
abstract
continue
strictfp
volatile
interface
protected
transient
implements
instanceof
synchronized
参考
1.Android混淆优化之如何解决混淆后与其他包里面的class名字冲突的问题
2.Android 字符串及字典混淆开源实现
最后
以上就是细腻春天为你收集整理的Android混淆——解决与其它包包名冲突的全部内容,希望文章能够帮你解决Android混淆——解决与其它包包名冲突所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复