2011-12-23 13 views
4

ライブラリプロジェクトは正常ですが、メインプロジェクトにインポートすると、リソースを参照している各行にエラーが表示されます:アンドロイドライブラリプロジェクト:R.idは解決できないか、フィールドではありません

idは解決できないか、フィールドが主なプロジェクトは、エラーが表示されない

ではありません。

私は、アンドロイドがどこからリソースをインポートするかを知っています。

RelativeLayout menuLayout = (RelativeLayout) this.findViewById(R.id.menu_layout); 

しかし、これはどちらも動作します:そのようなラインで

RelativeLayout menuLayout = (RelativeLayout) this.findViewById(net.bla.library.R.id.menu_layout); 

任意のアイデア?

EDITは:私が見つけたものです:

できるだけ早く私は、ライブラリプロジェクトを含めると、EclipseはメインアプリにライブラリからGEN/net.mylibrary.Rを複製(その2つのパッケージがですgenフォルダ:アプリケーションからのもの、ライブラリからのコピーされたもの)。奇妙なことです:R.idがコピーに見つかりません。他にもいくつかの違いがあります。たとえば、コピーがその定義に追加の「最終」を使用するようなものです。

なぜこのようなことが起こるのかわかりません。誰か?

+0

Rとは何ですか? –

+0

@SteveC net.bla.library.R 少なくとも私は "R"の上にカーソルを置いたときに何が起こっているかを示しています。ああ、ちょうど見つかった:何とかEclipseはメインプロジェクト "gen"ディレクトリにも "ライブラリ"ディレクトリを作成したので、ライブラリ "R"はメインアプリ "R"によって無効になります。 pfuh、説明するのは難しい。unfortunatelly、 "library"ディレクトリを削除しようとすると、eclipseは直ちにそれを再生成します:/ – stoefln

+0

jarファイルはJava/Build Path/User Librariesに追加されていますか? –

答えて

2

リソースがresフォルダ内にあるかどうか確認してください。すべてのリソースは内部にある必要があります。

  • 0のproyect
    • 0.1 SRC
    • 0.2 RES
      • 0.2.1レイアウト
        • 0.2.1.1 main.xml
        • 0.2.1.2 menu_layout.xml
      • 0.2.2ドロワーブル .....

たぶん、あなたは、プロジェクトフォルダ内のデータを入れています。

+0

ここは「図書館プロジェクト」の問題です。私がライブラリとして使用する前に、プロジェクトは完璧に機能しました。スクリーンショットを参照してください:http://postimage.org/image/oxmt18hi9/ – stoefln

5

EclipseはAndroid android.Rをインポートすることがあります。これは、あなたと同じようなエラーが発生します。

ファイルの先頭からインポートを探して削除します。

それは「Using Eclipse | Android Open Source」に述べていますとおり:

注:時々、あなたがそうでなければ並べ替えたりする日食頼む場合は特に、リソースを使用してファイルの先頭にインポートandroid.R文を追加するのが好きEclipseの輸入を管理する。これはあなたのメイクを壊す原因になります。これらの誤ったインポートステートメントを探して削除してください。

+0

ありがとう、それは何も変更されません – stoefln

2

私は同様の問題があり、解決することができました。 ここで私は何をしたのですか: 私のライブラリプロジェクトの主なアクティビティを呼び出すとき、アクティビティのonCreateメソッドはsetContentViewメソッドを呼び出し、R.layout.mainをパラメータとして使用します。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    requestWindowFeature(Window.FEATURE_NO_TITLE);   

    setContentView(R.layout.main); 
    Button btn = (Button) findViewById(R.id.main_button1); 
    btn.setOnClickListener(this); 

findViewByIdが返されました。 ライブラリプロジェクトのmain.xmlは、メインプロジェクトのmain.xmlによって上書きされているようです。 そこで、ライブラリのmain.xmlと同じ内容の新しいxmlレイアウトmain_libname.xmlを作成し、このレイアウトをsetContentViewのパラメータとして使用しました。 これはうまくいった!

+0

唯一の答えは働いた!ありがとう – tieorange

0

ライブラリプロジェクトで定義されているR.idアイテムに "シンボル変数を見つけることができませんでした"というエラーもありました。特に、他のRフィールド(例:R.layout)がはっきりと見えても、R.idシンボルだけがメインプロジェクトで解決できませんでした。

幸いにも、私は解決策につきまとうことができました。私の場合、私のメインプロジェクトで定義されているリソース(レイアウトファイル)は、ライブラリプロジェクトとまったく同じ名前であったことが判明しました。

これは、これはファイルシステムごとのように見えたものだった:

top_level_project 
    main_android_proj 
     src 
      main 
       res 
        layout 
         activity_main.xml 
    android_library_subproject 
     src 
      main 
       res 
        layout 
         activity_main.xml 

私のサブプロジェクトのactivity_main.xmlはそうのようなIDを持っていた:

<RelativeLayout....> 
    <TextView android:id="@+id/special_text" ... /> 
</RelativeLayout> 

そして、これは私が参照しようとする方法です。私の主なプロジェクトのJavaコードのid:

MainActivity.java: 

    public void onCreate() { 
     setContentView(R.layout.activity_main); 
     TextView tv = (TextView) findViewById(R.id.special_text); 
     tv.setText("Hello Android"); 
    } 

この問題を解決するために、私は私の中に問題のあるファイルを名前を変更しましたメインプロジェクトを別のプロジェクトに

リソースにレイアウト名が重複しているようには見えません。 実際、sdk docsは、ライブラリプロジェクトを使用するときにリソース名の競合で注意しなければならないことを指摘します:ツールは、ライブラリ のリソースをマージするので

  • リソースが

を競合しますプロジェクトを従属するアプリケーションプロジェクトのプロジェクトと比較すると、リソースIDが の両方のプロジェクトで定義されている可能性があります。この場合、ツール は、アプリケーションからリソースを選択するか、または優先度が最大の のライブラリを選択し、他のリソースは破棄します。 アプリケーションを開発する際には、共通リソースIDが複数のプロジェクトで定義された であり、アプリケーションまたは優先度の高いライブラリのリソース が優先されてマージされる可能性があることに注意してください。

関連する問題