赞
踩
需要在SystemUI中使用高斯模糊效果,android系统中framework/base/rs库有次功能,应用层使用这个库对应的java包名称是android.support.v8.renderscript。需要在systemui中调用这个库,就得修改systemui下的android.mk。
android.mk修改后如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := SystemUI-proto
LOCAL_SRC_FILES := $(call all-proto-files-under,src)
LOCAL_PROTOC_OPTIMIZE_TYPE := nano
LOCAL_PROTO_JAVA_OUTPUT_PARAMS := optional_field_style=accessors
include $(BUILD_STATIC_JAVA_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := SystemUI-tags
LOCAL_SRC_FILES := src/com/android/systemui/EventLogTags.logtags
include $(BUILD_STATIC_JAVA_LIBRARY)
# ------------------
include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-Iaidl-files-under, src) $(call all-renderscript-files-under, src)
LOCAL_STATIC_ANDROID_LIBRARIES := \
SystemUIPluginLib \
android-support-v4 \
android-support-v7-recyclerview \
android-support-v7-preference \
android-support-v7-appcompat \
android-support-v7-mediarouter \
android-support-v7-palette \
android-support-v14-preference \
android-support-v17-leanback
LOCAL_STATIC_JAVA_LIBRARIES := \
SystemUI-tags \
SystemUI-proto \
android-support-v8-renderscript
LOCAL_JAVA_LIBRARIES := telephony-common
LOCAL_JAVA_LIBRARIES += android.car
LOCAL_PACKAGE_NAME := SystemUI
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res-keyguard $(LOCAL_PATH)/res
ifneq ($(INCREMENTAL_BUILDS),)
LOCAL_PROGUARD_ENABLED := disabled
LOCAL_JACK_ENABLED := incremental
LOCAL_DX_FLAGS := --multi-dex
LOCAL_JACK_FLAGS := --multi-dex native
endif
include frameworks/base/packages/SettingsLib/common.mk
LOCAL_AAPT_FLAGS := --extra-packages com.android.keyguard
LOCAL_RENDERSCRIPT_FLAGS := -rs-package-name=android.support.v8.renderscript
LOCAL_JNI_SHARED_LIBRARIES := librsjni
include $(BUILD_PACKAGE)
include $(call all-makefiles-under,$(LOCAL_PATH))
在以上 android.mk中,加粗部分是后来添加的,上面实在android8.1源码基础上修改添加的。
添加后,编译发现,load so的时候,报错,报java方法找不到的错误。
报这个错误的原因是,systemui中,对java代码进行了混淆,在android.mk中如下设置:
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
解决这个错误有两种思路,一种是去掉上面这行代码,不好,第二种是不混淆android.support.v8.*内的java代码即可。
所以,要在systemui的proguard.flags中加上如下代码:
-keep class android.support.v8.** { *; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。