我正在开发一个开源项目.由于任何人都可以下载源代码并自行构建,我不想在任何地方对包名称进行硬编码- 包括目录结构.
我ant用于建筑.显然我可以修改build.xml,但我相信这会被覆盖android update.无论使用什么都将致力于Git回购,它不应该太复杂.
目前,直接从Git仓库构建代码的过程非常简单.以下是该README文件的摘录:
$ cd ~/src/isokeys/IsoKeys
$ android list targets # I build against API level 10.
$ android update project --name IsoKeys --target 1 --path ./ # Only needed first time.
$ ant debug && adb -d install -r bin/IsoKeys-debug.apk
Run Code Online (Sandbox Code Playgroud)
对我来说,将包名放入其中是有意义的local.properties,因为这是.gitignore'd.由于程序包名称不会出现在其他任何位置,因此构建将失败而不执行此操作.所以需要至少增加一步README,但我希望将其保持在最低限度.
编辑:当然,另一个要求是差异是有意义的 - 如果你手动重命名包名称他们不会.
我正在开发一个通用的Android游戏引擎,它将在我的许多Android应用程序中用作基本系统.问题是,在我的所有Java文件中,我目前必须对软件包名称进行硬编码,如下所示:
package com.example.mygameengine;
Run Code Online (Sandbox Code Playgroud)
但是因为我想在许多不同的应用程序中使用我的通用游戏引擎的代码,我需要找到一种方法来在编译时指定Java文件的包名称,因为我不想保留我的Java源代码的几个副本因为包名的不同.我希望有一个中央源代码树,包名称应该可以动态更改,具体取决于我即将编译的应用程序.
那么有办法做这样的事情:
package $(PACKAGE_NAME)
Run Code Online (Sandbox Code Playgroud)
在Java源代码中,在编译时将$(PACKAGE_NAME)替换为真实的包名?也许javac有一个选项允许我为它传递的文件指定一个包名,而不是从文件本身中取出它?请注意,我没有使用Eclipse,而是使用ant和make等准系统命令行工具.
编辑:我不明白为什么这被标记为重复.我已经问过一个基本问题,即Java语言中的"package"指令是否需要源代码中的硬编码字符串参数,或者是否也可以使用编译器指令在编译时设置此包名称.这是一个完全不同的问题,而不是在这里被链接为假定的"原始"问题,它与Android构建系统关系更紧密.我的问题是关于Java语言的基础知识,而不是Android构建系统.