6

このチュートリアルに従って AOSP システム サービスを構築しました: http://www.androidenea.com/2009/12/adding-system-server-to-android.html

ここで、コンパイル済みの .so ファイルを使用したいのですが、コードがアクセスできるようにどこに配置すればよいかわかりません。

そこで、framewaork/base/libs/my_folder/ にフォルダーを作成し、そこに my_lib.so android.mk という 2 つのファイルを配置しました。

android.mk の内容は次のとおりです。

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE:= my_lib
LOCAL_MODULE_TAGS := optional

include $(BUILD_SHARED_LIBRARY)

make はエラーなしで実行されましたが、コードが次の方法でライブラリをロードしようとしたとき: System.loadLibrary("my_lib");

私はこのエラーを受け取りました:

06-27 13:58:55.581: E/AndroidRuntime(806): 原因: java.lang.UnsatisfiedLinkError: ライブラリ my_lib が見つかりません。[/vendor/lib/my_lib.so、/system/lib/my_lib.so]を試しました

そのため、soファイルをout/target/product/generic/system/libに追加しましたが、同じエラーが発生しました。

my_lib.so ファイルはどこに配置すればよいですか? それにandroid.mkが必要ですか?多分私はそれをシステムのどこかに登録するべきですか?

前もって感謝します!

4

2 に答える 2

11

したがって、答えは非常に簡単でした。make コマンドは out/target/product/generic/system/lib から system.img に lib をコピーしないため、lib をシステム イメージの system/lib フォルダーにコピーする必要があります。

トリックは、この行を追加することです

  PRODUCT_COPY_FILES += $(LOCAL_PATH)/my_lib.so:system/lib/my_lib.so

full.mk ファイルに。その場所は次のとおりです: android-source/build/target/product また、my_lib.so をその近くに置きます (パスからわかるように)

イメージを実際のデバイスで実行する予定の場合は、デバイス名の定義の後にこの行を追加します。f.ex。Nexus 4 で実行している場合は、android-source/device/lge/mako/full_mako.mk に配置します。

于 2013-07-04T12:16:09.307 に答える
1

ビルド済みのライブラリを Android AOSP ソース コードに追加して、それを AOSP システム イメージの一部にすることができます。そのための手順を順を追って説明しています。

ステップ 1 AOSP ソース コードの外部フォルダー内にフォルダー (たとえば myLibs) を作成します。

AOSP ソース コードの外部フォルダーは、外部のオープン ソース ライブラリを参照します。これは、Android プラットフォームが依存しているが、主に Android オープンソース プロジェクトによって開発および保守されていないライブラリを意味します。

例としては、ブラウザ用の webkit、フォント用の FreeType、データベース用の SqlLite などがあります。Android に追加される機能が増えるにつれて、これらのライブラリの多くが外部に含まれるようになります。

ステップ 2 Android.mk ファイルを作成する

フォルダー内に Android.mk ファイルを作成し (myLibs としましょう)、その中に .so ファイルをコピーします。
android.mk ファイルに次のコンテンツを使用できます

# Prebuilt Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libMyabc # your lib name
LOCAL_SRC_FILES := libMyabc.so
# your lib .so file name
include $(BUILD_SHARED_LIBRARY)

ステップ 3 Framework にライブラリを追加する

最後のステップでは、ライブラリを Android AOSP フレームワークの makefile に追加して、システム イメージの一部として認識してビルドできるようにする必要があります。
次の場所に Framework Android.mk ファイルがあります
/android_aosp_sourcecode_download_folder/frame enter code hereeworks/base/core/jni/

Android.mk ファイルを開き、次のセクション
LOCAL_SHARED_LIBRARIESにライブラリを追加し
ます 。

それだけです...作成(make -j4)すると、次のフォルダー
/android_aosp_sourcecode_download_folder/out/target/product/generic/obj/lib
に追加されたsoファイルが次のようなファイル名で見つかります:-libMyabc.soおよびlibMyabc.so .toc
で、system/lib フォルダー
/android_aosp_sourcecode_download_folder/out/target/product/system/libにもありました

于 2019-12-06T05:39:11.280 に答える