5

Android用のライブラリからソースコードをダウンロードしてコンパイルし、.jarファイルを取得しました。プロジェクトに含めて使用しようとしましたが、常にjava.lang.NoClassDefFoundErrorが発生します。jarファイルにあることに気付きましたR$XXX ファイルがありません。この投稿を読みました: Android ライブラリ インポートは R を削除し、解決策を試しましたが、うまくいきませんでした。

独自の単純なライブラリを作成しましたが、R ファイルが jar に含まれていないか、winrar を使用して .class ファイルを手動で追加する必要があることがわかりましたが、ADT で eclipse を使用しているため、単純なものが不足していると思います。

みんなありがとう

4

1 に答える 1

8

jar ファイルを作成する場合は、jar ファイルに r.java,manifeast ファイルを含めないでください。

jar はコンパイル中にコンパイルされず、コンパイル時に静的整数を作成しないためです。

Androidには、Android プロジェクトに似たAndroid LIBraryがありますが、他のプロジェクトに含めることができます。

それでもjarファイルが必要な場合は、クラスファイルをjarに保持して、アプリケーションに含まれるすべてのリソースを含め、Javaファイルから、以下のコードを使用して実行時にリソースを参照できます。

コードで R.drawable.icon の代わりに getResourseIdByName(getPackageName(), "drawable", "icon") を使用する必要があること。以下は、getResourceIdByName: のコードです。

public int getResourseIdByName(String packageName, String className, String name) {
            int id = 0;
        try {
            for (int i = 0; i < Class.forName(packageName + ".R").getClasses().length; i++) {
                if(Class.forName(packageName + ".R").getClasses()[i].getName().split("\\$")[1].equals(className)) {
                    if(Class.forName(packageName + ".R").getClasses()[i] != null)
                        id = Class.forName(packageName + ".R").getClasses()[i].getField(name).getInt(Class.forName(packageName + ".R").getClasses()[i]);
                    break;
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
        return id;
    }
于 2012-04-25T02:10:42.393 に答える