java - android:使用库内部项目的最终静态变量,或其他一些技巧来排除未使用的代码

标签 java android eclipse javac android-library

我使用 android 库(库项目,而不是 jar)来维护 2 个目标项目(免费和付费)和 1 个代码库。目标项目中根本没有代码,所有代码都在库中。

我需要在库中添加代码块:

if (main.liteVersion)
{
  //lite version code here
}
else
{
  //full version code here
}
据我所知,如果条件中的变量是最终的静态java编译器将排除未使用的代码(如果main.liteVersion为true,则为完整版本代码)。这就是我需要的。因为我不想让别人反编译精简版并看到付费版本的代码。我知道这不是 def,但我只是不在免费版本二进制文件中包含付费版本代码。

但我无法在目标项目中添加最终静态变量,然后在库中看到它。

有一些方法可以确定我们处于哪个目标项目中。 我们可以读取当前的包名称来确定正在运行的版本。 如果我们在目标项目中添加配置类,我们可以使用库中的反射来获取 cfg 值。 我们也可以在目标项目中添加资源,但它将添加到 com.tertium.lite.R 中,但在库中我们只能读取 com.tertium.library.R (当然使用反射我们可以读取任何内容)。 但这种“动态”方法不会使编译器排除未使用的代码(条件将是运行时计算的值)。

我们可以在构建时重写库项目内的配置类(使用 ant 或 shell 任务),然后我们将拥有“自然”的静态设置,但我不想碰库。

以防万一 - 我使用 eclipse helios,android 版本 - 1.6-4.2。

有什么想法吗?谢谢!

更新:它不再是实际的,因为我拒绝使用项目作为库,并开发了基于 ant 的无缝资源编译和构建工作流程,支持所有需要的配置。 此外,据我所知,我原来的问题没有有效的答案。

最佳答案

我建议您将其作为构建系统(ant、maven、make 等)的步骤。我希望这样的源代码很少,因此您可以添加文件替换手册作为构建步骤。

不要让这个编译器工作:长期来看很难控制。编译器选项/版本将会改变,行为也会改变。

关于java - android:使用库内部项目的最终静态变量,或其他一些技巧来排除未使用的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14809183/

相关文章:

java - 奇怪的输出打印到错误屏幕(System.err)

java - 如何使用java反转句子中的单词

java - 使用scanner/reader/bufferedreader读取文本文件以读取.txt文件中的数字

java - serenity-bdd 中的 Cucumber @After 场景实现

java - 在android中将Jsonobject转换为JsonArray

android - 我的手机设备上的 adb shell : weird characters appear (terminal color issue)

android - 未能解决

java - CheckStyle - 重写方法的 JavaDoc

java - 如何在 Struts 1.2 的 .properties 文件中转义大括号

java - 为什么在 java 中的 catch block 中需要括号?