2013-06-27 25 views
4

我已經建立了AOSP系統服務按照本教程: http://www.androidenea.com/2009/12/adding-system-server-to-android.html導入自定義,這樣在文件到AOSP

現在我想使用預編譯的.so文件,並不能找出哪裏把它,所以我的代碼將能夠訪問它。

所以,我創建了framewaork /基/庫/ my_folder/ ,並把有兩個文件夾: my_lib.so android.mk

的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]

所以我增加了這樣的文件出/目標/產品/通用/系統/庫 但得到了同樣的錯誤。

因此,我應該在哪裏放置my_lib.so文件?並且是一個android.mk需要它嗎? 也許我應該在系統的某個地方註冊它?

在此先感謝!

回答

9

所以答案很簡單。 我真的需要將我的庫複製到系統映像到system/lib文件夾,因爲make命令不會將它從out/target/product/generic/system/lib複製到system.img

技巧就是加上這一行

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

to full.mk文件。它的位置是: Android的源/建設/目標/產品 也把my_lib.so靠近它 (由路徑來看)

如果您打算運行一個真正的設備上的圖像,添加此在設備名稱定義之後行。 f.ex. f.ex.如果你在Nexus 4上運行,把它放在android-source/device/lge/mako/full_mako.mk

+4

或者在你的device.mk文件中添加你的庫到「PRODUCT_PACKAGES + = \ my_lib.so」 –