【发布时间】:2016-08-29 06:19:56
【问题描述】:
我有 3 个项目用作第 4 个(主项目)中的库。
这3个项目相互编译如下(build.gradle):
图书馆项目:
-
项目A
compile project(":projectA") compile project(":projectB") -
项目 B
compile project(':projectC')
主要项目:
compile(name: 'projectA', ext: 'aar')
compile(name: 'projectB', ext: 'aar')
compile(name: 'projectC', ext: 'aar')
我想对“图书馆项目”做一些事情,以便在主项目中,如果我点击图书馆项目中的任何类,我应该看不到代码,或者它应该被加密。
例如,如果 ProjectA 中有 InterfaceA,并且 Main Project 的主要活动实现了该接口,如果我“Ctrl-Click”进入该接口,结果应该与我上面指定的类似。
我知道 Proguard 做了类似的事情,但那只是当你正在构建一个发布 .apk 时,我需要编译库的相同结果。
【问题讨论】:
-
我想你问的是如何控制/配置你的 IDE,而不是解决编程问题。只是另一个指针:Proguard 混淆,不加密,它在字节码上执行此操作。如果您在 IDE(或开发 AAR)中打开了源文件,那么 IDE 当然会通过单击源文件来帮助您....
-
那么你显然没有理解这个问题。我的 IDE 的配置方式无助于如果我将库分发给外部实体,他们仍然能够查看库代码。你希望我也去配置他们的 IDE 吗?
-
我明白了。然后你必须使用 Proguard 或类似工具来混淆你的代码。但这只是部分解决方案——字节码可以相对容易地反编译成 Java,Proguard 只能替换事物的名称(变量、私有成员和方法等),而不是它们的实现。跨度>
-
是的,这就是问题所在。付费图书馆是如何做到的?我想分发这些库以供使用,但不希望显示任何实现。它不是开源代码。