2010-12-02 14 views
2

素朴な疑問が、アイブ氏はのための答えがわからないイムを実現し、この1 ....Javaパッケージ名と競合

私は名前のライブラリパッケージとアンドロイドのアプリケーションを作成していた場合

com.example.one 

その後、私は別のアプリを作成し、名前を少しリファクタリングクラスを持っている

com.example.one 

と別のパッケージが含まれ、これはアプリケーションのいずれかに問題を引き起こす可能性が?

最近私はいくつかのGoogleソースコードに問題がありました。デバイスmanufactorerが私のapkで使っていたカスタムOSに同じlibsを含んでいたという事実に至りました。満足していない!誰もがここで私を埋めることができる場合、私はobviosulyかなりfindamentalここで何かを理解し:)いけないとして、

(またはので、私は言われた)

thankx

EDIT:間の差分の良いリンクAndroidおよびJavaパッケージ名http://blog.javia.org/android-package-name/

答えて

3

(LordTからの回答を参照してください)あなたは2つのアプリケーションと2つのライブラリを持っているかのようにアプリの問題ではないようですアプリ。 Androidアプリはサンドボックスで実行されます。つまり、アプリAのクラスローダーにはアプリBのクラスは表示されず、その逆もあります。 これはシステムワイドライブラリでは明らかに異なります。それらはクラスローダーからアクセス可能であり(もちろん)、あなたがあなたのアプリに同じクラスを持っていれば問題を引き起こします。

+0

@ user149316 - 明らかに、いくつかの言葉をぼんやりと訳している間に(そして実際の意味が失われている)全体の質問を読んでいます。名誉と小道具! – KevinDTimm

+0

すべての回答に感謝します。これはsiが以前に持っていた問題を説明しています。また、安心してライブラリコード(複数のアプリケーション用)を作成できることを意味します。ありがとうございます:) – Dori

4

クラスローダーは、同じクラスの2つのバージョンをロードすることはできません。それはただ一つを選ぶ。しかし、どちらが選ばれるのかは不明です。そう、はい、それは問題を引き起こします。

プラットフォーム(java-ee)には、これらのケースのjar優位性を指定するオプションがあります。私はアンドロイドについて知りません。

更新:最初の理解が正しくない、つまりクラスパスで同じjar(ライブラリ)を2回使用していないのではなく、異なるバージョンのjarファイルで2つの別々のアプリケーションを起動している場合 - 干渉しない(したがって問題はありません)

+0

okこれは問題を引き起こす可能性があります。したがって、再利用可能なライブラリコードを記述すると、古いバージョンを使用するクライアントが壊れた場合にインターフェイスが変更されないことを常に確認する必要があります。 – Dori

+0

それはより広い議論です。クライアントが単純にjarを置き換えることができる場合は、APIを変更できます。 jarファイルがプラットフォームに付属していて変更できない場合は、APIを変更しないでください。 – Bozho

+0

待機しますが、プラットフォーム上の1つのクライアントがjarを置き換えた場合、クライアントはどちらのバージョンを読み込むのですか? – Dori

3

はい、パッケージに矛盾するクラス名がある場合にのみ問題が発生する可能性があります。

これは実際に、それは二つの別々のAndroidの場合に問題が発生することはありません

0

簡単な回避策は、アプリケーション/ライブラリ名をパッケージに含めることです。例:

com.app1.example.one 
com.app2.example.one 

これにより、2つのパッケージ間の混乱を避けることができます。

関連する問題