問題背景:
今天在frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java引用到了mtk自定義的類alps\mediatek\frameworks\base\media\audio\java\com\mediatek\audioprofile\AudioProfileManager.java ,編譯的時候提示如下錯誤:
frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java:965: cannot find symbol
symbol : class AudioProfileManager
location: class com.android.internal.policy.impl.GlobalActions.SilentModeTriStateAction
private AudioProfileManager mProfileManager;
在項目中搜索該類,在
/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
frameworks/base/packages/SystemUI/src/com/mediatek/systemui/statusbar/toolbar/QuickSettingsConnectionModel.java
中都發現了該類的引用,似乎並無問題。
解決方法:
看一下GlobalActions.java的路徑,發現它隸屬於policy下面,在policy下面發現一個Android.mk文件。這個就比較有意思了,可以發現這個文件中並未引用AudioProfileManager類的庫,所以在Android.mk中添加如下內容即可:
LOCAL_PATH:= $(call my-dir)
# the library
# ============================================================
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under, src)
<span style="color:#ff0000;">#add by yourself在這個地方添加引用函數所在的庫
LOCAL_JAVA_LIBRARIES := mediatek-framework</span>
LOCAL_MODULE := android.policy
include $(BUILD_JAVA_LIBRARY)
# additionally, build unit tests in a separate .apk
include $(call all-makefiles-under,$(LOCAL_PATH))
這個庫名稱可以在AudioProfileManager所在模塊的Android.mk的LOCAL_MODULE中找到。