我有3个项目,在第四个项目(主项目)中被用作库。
这3个项目的内部编译如下(build.gradle):
库项目:
编译项目(“:projectA”)编译project(":projectB")
编译project(':projectC')
主项目:
compile(name: 'projectA', ext: 'aar')
compile(name: 'projectB', ext: 'aar')
compile(name: 'projectC', ext: 'aar')
我想对“库项目”做一些事情,以便在主项目中,如果我从库项目中单击任何类,我应该不能看到代码,或者它应该是加密的。
例如,如果ProjectA中有InterfaceA
,并且主项目的主活动实现了该接口,如果我在接口中“按住Ctrl键并单击”,结果应该类似于我上面指定的结果。
我知道Proguard做了一些类似的事情,但只有当你在构建一个发布的.apk时,我才需要编译后的库得到同样的结果。
发布于 2016-08-31 20:58:32
许多项目使用ProGuard来实现这种保护。
公共类your.package.name { -keep *;}
这里有一个更广泛的示例:http://proguard.sourceforge.net/manual/examples.html#library
但是,也有一些限制:
vehicleLicensePlate
可能会变成_a
。正如任何代码维护者都会提到的那样,糟糕的成员和变量名称使维护变得真正hard.因此,混淆只会使反向工程和理解库变得更加困难,它不会使这项任务变得不可能。
最后一个指针: ProGuard转储一个文件,其中包含它所做更改的列表,特别是行号。当您从客户那里获得堆栈跟踪时(或者通过Crashlytics之类的在线工具),您可以恢复混淆,以便进行调试。在任何发布-构建过程中,您都需要找到一种方法来保存此文件。
当您对您的库进行增量发布时,也需要该文件,以便模糊处理与先前发布的版本一致。如果你不这样做,客户就不能直接替换你的库,并且将不得不对他们的应用程序进行完整的重建(和链接)。
虽然ProGuard是一个免费且简单的选择,但也有其他免费和付费的混淆工具。有些提供了更多的功能,但它们基本上是相同的,并且ProGuard与IDE、工具和服务的兼容性非常好。
发布于 2016-09-06 23:50:41
您可以将所有不想公开的方法都设置为默认方法,这样它们就不能在原始项目之外使用。此外,您应该将库从应用程序项目中分离出来,编译它们,并将它们用作外部依赖项。如果你不想发布这个库的源代码,那就不要把它添加到编译选项中。如果您以外的其他人需要使用您的库,请使用bintray发布它,或者只需将编译的aar/jar文件添加到应用程序项目中。
下面是整个过程的指南:https://inthecheesefactory.com/blog/how-to-upload-library-to-jcenter-maven-central-as-dependency/en
或者,您可以使用maven构建库项目(我发现它比使用gradle容易得多),请看下面的示例:https://github.com/simpligility/android-maven-plugin/tree/master/src/test/projects/libraryprojects
发布于 2016-09-06 19:17:24
2个步骤:
https://stackoverflow.com/questions/39199669
复制相似问题