1

私は、ベースシステムとして多くのAndroidアプリで使用される汎用Androidゲームエンジンを開発しています。問題は、すべてのJavaファイルで、現在、パッケージ名を次のようにハードコーディングする必要があることです。

package com.example.mygameengine;

しかし、汎用ゲームエンジンのコードをさまざまなアプリで使用したいので、Javaソースのコピーをいくつか保持したくないので、コンパイル時にJavaファイルのパッケージ名を指定する方法を見つける必要があります。パッケージ名が違うため。中央のソースツリーを1つ作成したいのですが、コンパイルしようとしているアプリに応じて、パッケージ名を動的に変更できる必要があります。

だから、このようなことをする方法はありますか?

package $(PACKAGE_NAME)

$(PACKAGE_NAME)がコンパイル時に実際のパッケージ名に置き換えられるJavaソースでは?たぶんjavacには、ファイル自体から取得する代わりに、渡されるファイルのパッケージ名を指定できるオプションがありますか?私はEclipseを使用していませんが、antやmakeなどの必要最低限​​のコマンドラインツールを使用していることに注意してください。

編集:なぜこれが重複としてタグ付けされているのかわかりません。Java言語の「package」ディレクティブでソースコードにハードコードされた文字列引数が必要かどうか、またはコンパイラディレクティブを使用してコンパイル時にこのパッケージ名を設定することも可能かどうかについて、基本的な質問をしました。これは、Androidビルドシステムにより密接に関連していると思われる「元の」質問としてここにリンクされている質問とはまったく異なる質問です。私の質問は、Androidビルドシステムではなく、Java言語の基本についてです。

4

3 に答える 3

5

一般的なゲームエンジンコードをスタンドアロンJARに組み込むことができますか?

次に、それを使用する各Androidアプリに依存関係として含めることができます。

適切なバージョン管理を行うと、このコードが保存される中心的な場所が1つだけになります。

于 2013-01-31T14:46:45.563 に答える
1

できません。そして、それはコードの再利用に対する適切なアプローチではありません。

よく使用するコードをjarにパッケージ化し、そのjarを必要なすべてのプロジェクトに含めるだけです(Androidでは、クラスをクラスパスに追加し、[注文とエクスポート]タブでエクスポート済みとしてマークすることでこれを行います)。

于 2013-01-31T14:47:49.793 に答える
0

クラスに関するコアメタデータの一部であるため、それは不可能です。

パッケージは、関連するJavaエンティティ(クラス、インターフェイス、例外、エラー、列挙型など)のコレクションです。パッケージは次の目的で使用されます。

クラス名の前にパッケージ名を付けることにより、クラスの名前の競合を解決します。たとえば、com.zzz.Circleとcom.yyy.Circleは2つの異なるクラスです。それらは同じクラス名Circleを共有していますが、com.zzzとcom.yyyの2つの異なるパッケージに属しています。これらの2つのクラスは、同じプログラムで使用でき、完全修飾クラス名(パッケージ名とクラス名)を使用して区別できます。このメカニズムは名前空間管理と呼ばれます。

アクセス制御:パブリックとプライベートに加えて、Javaには、パッケージに関連する2つのアクセス制御修飾子(保護とデフォルト)があります。保護されたエンティティには、同じパッケージ内のクラスとそのサブクラスからアクセスできます。アクセス制御修飾子のないエンティティ(つまり、デフォルト)には、同じパッケージ内のクラスからのみアクセスできます。

再利用可能なクラスのコレクションを、通常はJava Archive(JAR)ファイルと呼ばれる形式で配布するため。

于 2013-01-31T14:46:29.230 に答える