我使用 android 库(库项目,而不是 jar)来维护 2 个目标项目(免费和付费)和 1 个代码库。目标项目中根本没有代码,所有代码都在库中。
我需要在库中添加代码块:
if (main.liteVersion)
{
//lite version code here
}
else
{
//full version code here
}
据我所知,条件变量是否为最终静态 java 编译器将排除未使用的代码(如果 main.liteVersion 为真,则为完整版本代码)。这就是我需要的。因为我不希望有人反编译精简版并查看付费版本的代码。我知道这不是一个定义,但我只是没有在免费版本二进制文件中包含付费版本代码。
但是我不能在目标项目中添加最终的静态变量,然后在库中看到它。
有一些方法可以确定我们在哪个目标项目中。我们可以读取当前包名称来确定正在运行的版本。如果我们在目标项目中添加配置类,我们可以在库中使用反射来获取 cfg 值。我们也可以在目标项目中添加资源,但它会添加到 com.tertium.lite.R,但在库中我们只能读取 com.tertium.library.R(当然使用反射我们可以读取任何内容)。但是这样的“动态”方法不会使编译器排除未使用的代码(条件将是运行时计算的值)。
我们可以在构建时重写库项目中的配置类(使用 ant 或 shell 任务),然后我们将拥有“自然”的静态设置,但我不想接触库。
以防万一-我使用eclipse helios,android版本-1.6-4.2。
有任何想法吗?谢谢!
更新:它不再是实际的了,因为我拒绝将项目用作库并开发了无缝的基于 ant 的资源编译和构建工作流,它支持所有需要的配置。此外,据我所知,我最初的问题没有有效的答案。