我有3个项目在第4个(主项目)中用作库.
这三个项目相互编译如下(build.gradle):
图书馆项目:
项目A.
compile project(":projectA")
compile project(":projectB")
Run Code Online (Sandbox Code Playgroud)项目B.
compile project(':projectC')
Run Code Online (Sandbox Code Playgroud)主要项目:
compile(name: 'projectA', ext: 'aar')
compile(name: 'projectB', ext: 'aar')
compile(name: 'projectC', ext: 'aar')
Run Code Online (Sandbox Code Playgroud)
我想对"图书馆计划"做点什么,所以在主项目中,如果我点击图书馆项目中的任何一个类,我应该要么看不到代码,要么加密.
因此,例如,如果InterfaceA在ProjectA中,并且主项目的主要活动实现了该接口,如果我"按住Ctrl键单击"到界面中,结果应该类似于我上面指定的.
我理解Proguard做了类似的事情,但只有在你构建一个版本.apk时,我需要为编译库提供相同的结果.
许多项目使用ProGuard来实现这种保护.
如果组件被缩小(强烈建议),那么你需要告诉Progaurd"root"类是什么,否则它会将库缩小到几乎没有.这可以通过在配置文件中添加规则来实现:
-keep class your.package.name {public *;}
Run Code Online (Sandbox Code Playgroud)
这里有一个更广泛的例子:http://proguard.sourceforge.net/manual/examples.html#library
但是有一些限制:
vehicleLicensePlate可能成为无意义的非公共类_a.任何代码维护者都会关联,坏成员和变量名称使维护变得非常困难.因此,混淆只会使反向工程和理解库变得更加困难,它无法使这项任务变得不可能.
最后一个指针:ProGuard转储一个文件,其中包含已更改内容的列表,尤其是行号.当您从客户(或通过Crashlytics等在线工具)获得堆栈跟踪时,您可以恢复混淆,以便进行调试.在任何发布 - 构建过程中,您都需要找到保存此文件的方法.
在创建库的增量版本时也需要此文件,以使模糊处理与先前发布的版本一致.如果不这样做,客户就无法直接替换您的库,并且必须对其应用程序进行完整的重建(和链接).
虽然ProGuard是一个免费的n-easy选项,但它还有其他免费和付费的混淆器.有些提供了更多功能,但它们基本相同,ProGuard与IDE,工具和服务的兼容性非常好.
| 归档时间: |
|
| 查看次数: |
4522 次 |
| 最近记录: |