1

我正在开发一个通用的 Android 游戏引擎,它将在我的许多 Android 应用程序中用作基本系统。问题是,在我所有的 Java 文件中,我目前必须像这样对包名称进行硬编码:

package com.example.mygameengine;

但是因为我想在许多不同的应用程序中使用我的通用游戏引擎的代码,我需要找到一种在编译时为 Java 文件指定包名的方法,因为我不想保留我的 Java 源代码的多个副本因为包名不同。我想要一个中央源代码树,并且包名称应该可以根据我要编译的应用程序动态更改。

那么有没有办法做这样的事情:

package $(PACKAGE_NAME)

在 $(PACKAGE_NAME) 将在编译时用真实包名替换的 Java 源代码中?也许 javac 有一个选项允许我为它传递的文件指定一个包名,而不是从文件本身中获取它?请注意,我使用的不是 Eclipse,而是准系统命令行工具,例如 ant 和 make。

编辑:我不明白为什么这被标记为重复。我已经问过一个基本问题,即 Java 语言中的“包”指令是否需要在源代码中硬编码字符串参数,或者是否也可以在编译时使用编译器指令设置这个包名称。这是一个与此处链接为假定“原始”问题的问题完全不同的问题,该问题与 Android 构建系统的联系更加紧密。我的问题是关于 Java 语言的基础知识,而不是关于 Android 构建系统。

4

3 回答 3

5

你能把你的通用游戏引擎代码构建成一个独立的 JAR。

然后,您可以将它作为依赖项包含到使用它的每个 Android 应用程序中。

通过适当的版本控制,您将只有一个存储此代码的中心位置。

于 2013-01-31T14:46:45.563 回答
1

你不能。这不是代码重用的正确方法。

只需将您常用的代码打包到一个 jar 中,然后将该 jar 包含在您想要的每个项目中(在 Android 中,您可以通过将类添加到类路径中,然后在“Order & Export”选项卡中将其标记为已导出)

于 2013-01-31T14:47:49.793 回答
0

这是不可能的,因为它是关于你的班级的核心元数据的一部分

包是相关 Java 实体(例如类、接口、异常、错误和枚举)的集合。包用于:

通过在类名前加上包名来解决类的命名冲突。例如,com.zzz.Circle 和 com.yyy.Circle 是两个不同的类。虽然它们共享同一个类名 Circle,但它们属于两个不同的包:com.zzz 和 com.yyy。这两个类可以在同一个程序中使用,并使用完全限定的类名——包名加类名来区分。这种机制称为命名空间管理。

访问控制:除了 public 和 private,Java 有两个访问控制修饰符——protected 和 default——与包相关。同一包中的类及其子类可以访问受保护的实体。没有访问控制修饰符(即默认)的实体只能由同一包中的类访问。

用于分发可重用类的集合,通常采用称为 Java 存档 (JAR) 文件的格式。

于 2013-01-31T14:46:29.230 回答