2

複数のAndroid「サービス」で使用されるJavaライブラリを、ライブラリを各サービスのAPKに含めなくても、それらの独立したサービスでロードできる動的または共有ライブラリに分離しようとしています。

Android サービスの作成や DexLoader と Reflection の使用など、これを行うにはさまざまな方法があることは知っていますが、ライブラリのソースを変更しないようにしています。代わりに、それをビルドして自分のデバイスにインストールしようとしています (基本的に、提供された Android API を拡張します)。

以下は、まだ答えられていない非常によく似た質問です: 共通ライブラリを共有する Eclipse で Android アプリを作成する

これは Google が開示したくないことであることはわかっています。そのため、オンラインで情報を見つけることは非常に困難です。

これまでのところ、単純な「Hello World」プログラムをフレームワークディレクトリの下に配置してビルドし、プログラムのjarを正常に作成しようとしました。次に、product/core.mk にパッケージを追加し、さらに api/10.xml の下にパッケージ定義を追加した後、「make sdk」を実行すると、次のエラー メッセージが表示されました。

******************************
You have tried to change the API from what has been previously released in
an SDK.  Please fix the errors listed above.
******************************
make: *** [out/target/common/obj/PACKAGING/checkapi-last-timestamp] Error 38

回避策として、ビルド プロセス中に動的に作成される out ディレクトリ内の "public_api.xml" ファイルにパッケージを追加しました。この回避策により、SDK はエラーなしでビルドされます (ただし、もう一度クリーンアップを行うと、クリーンアップのために削除されるため、public_api.xml を再度変更する必要があります)。ただし、どこでもパッケージをインポートして使用しようとすると、「パッケージが存在しません」と表示されます

どんな助けでも大歓迎です!ありがとうございました!

4

1 に答える 1

2

最後にそれを理解しました。解決策は非常に簡単です。

ライブラリをFrameworks/baseフォルダーに配置し、すべてのソース コードが次のように java ディレクトリの下にあることを確認します。

../frameworks/base/HelloWorld/java/<source files and folders>

build/target/product/の下にあるcore.mkファイルを編集して、パッケージをリストに含めます。これにより、HelloWorld ライブラリがフレームワークに追加されます。

PRODUCT_PACKAGES := \
    bouncycastle \
    :
    :
    DefaultContainerService \
    Bugreport \
    HelloWorld

build/core/の下にあるpathmap.mkファイルを編集して、ディレクトリをリストに含めます。これにより、HelloWorld ライブラリが android.jar に追加されます。

FRAMEWORKS_BASE_SUBDIRS := \
    $(addsuffix /java, \
        core \
        graphics \
        location \
        media \
        opengl \
        sax \
        telephony \
        wifi \
        vpn \
        keystore \
        voip \
        HelloWorld \
     )

終わり。Androidを再構築すると、文句を言わず、ライブラリをframework.jarに追加する必要があります!

これが役立つことを願っています。

于 2012-06-01T19:20:03.070 に答える