Android系统——AOSP相关-->随记
杂记
android.bp 和android.mk 参与编译的jar包 路径--> out\target\common\obj\JAVA_LIBRARIES\
git diff ./ > a.patch git 拿到不同的改动 生成文件
mmma frameworks/base/packages/SystemUI/ > ../systemui.txt 编译文件
高效抓取日志
adb shell logcat > d:/0819.log
logcat -v time | grep "select_device" 遍历筛选
adb shell logcat -s CommandParser 只抓取-s 后面的标签的日志:(-s 类名)
关于路径
./build/make/core/envsetup.mk //路径的定义
# TARGET_COPY_OUT_* are all relative to the staging directory, ie PRODUCT_OUT.
# Define them here so they can be used in product config files.
TARGET_COPY_OUT_SYSTEM := system
TARGET_COPY_OUT_SYSTEM_OTHER := system_other
TARGET_COPY_OUT_DATA := data
TARGET_COPY_OUT_ASAN := $(TARGET_COPY_OUT_DATA)/asan
TARGET_COPY_OUT_OEM := oem
TARGET_COPY_OUT_RAMDISK := ramdisk
TARGET_COPY_OUT_DEBUG_RAMDISK := debug_ramdisk
TARGET_COPY_OUT_VENDOR_DEBUG_RAMDISK := vendor_debug_ramdisk
TARGET_COPY_OUT_TEST_HARNESS_RAMDISK := test_harness_ramdisk
TARGET_COPY_OUT_ROOT := root
TARGET_COPY_OUT_RECOVERY := recovery
编译APK
解决方案:1.将apk作为文件编译复制进/system/app内 2,拿到源码,查看问题 解决 ,重新编译一个apk
[copyFile](http://t.zoukankan.com/codeking100-p-10309929.html) apk利用PRODUCT_COPY_FILES 报错详解
方法1 》 使用双层文件夹/xx/Video/Video copy 待定
PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,vendor/qcom/qualcomms/proprietary/packages/Video/*,system/app)
需要将当前目录下的所有so文件拷贝到/system/lib目录下:
PRODUCT_COPY_FILES += \
$(call find-copy-subdir-files,*.so,$(LOCAL_PATH)/lib,system/lib)
方法2 》 shell命令 可以copy成功,但是最后build报mk语法的错误:missing separator还有一些奇怪的错误,也许这个东西不能放在它的Android.mk中
$(shell mkdir -p ${PATH}/system/etc/)源码编译的时候,先读取该mk文件,该目录还没创建,所以要建一个,否则拷贝失败。
$(shell cp -rf $(LOCAL_PATH)/usb_modeswitch ${OUT}/system/etc/),然后通过shell拷贝任意文件。
//如果copy apk报错
修改build\core\Makefile,注释掉check-product-copy-files的定义
#define check-product-copy-files
#$(if $(filter-out $(TARGET_COPY_OUT_SYSTEM_OTHER)/%,$(2)), \
# $(if $(filter %.apk, $(2)),$(error \
# Prebuilt apk found in PRODUCT_COPY_FILES: $(1), use BUILD_PREBUILT instead!)))
#endef
//如果copy .so报错(Android T)
build/make/core/Makefile
check-elf-prebuilt-product-copy-files:
-check_elf_prebuilt_product_copy_files := true
-ifneq (,$(filter true,$(BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES)))
-check_elf_prebuilt_product_copy_files :=
-endif
+# check_elf_prebuilt_product_copy_files := true
+# ifneq (,$(filter true,$(BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES)))
+# check_elf_prebuilt_product_copy_files :=
+# endif
check_elf_prebuilt_product_copy_files_hint := \
shell 命令
#拷贝文件到指定目录并可重命名文件,指定的目录不存在的会自动创建,拷贝文件只能一个个调用
define product_copy_files
$(shell mkdir -p out/target/product/$(TT_PLATFORM)/$(2) ; \
cp -f $(1) out/target/product/$(TT_PLATFORM)/$(2)/$(3) ;)
endef
#拷贝文件到指定目录,不改变原来文件名称,可批量拷贝
define copy_libs_to_system
$(shell mkdir -p out/target/product/$(TT_PLATFORM)/$(2) ; \
cp -rf $(1) out/target/product/$(TT_PLATFORM)/$(2)/ ;)
endef
//使用 demo.mk
$(call xy_product_copy_files,vendor/mediatek/proprietary/packages/demo/text/text.apk,system/app/text,text.apk)
copy so
Android mk文件拷贝第三方库到系统编译目录
Android 不同版本通过mk拷贝并安装APK
PRODUCT_COPY_FILES拷贝文件或文件夹
android 11去除多余APP函数
第一步
\build\make\core 文件夹下 product.mk 新增命令:
# move unnecessary apps
_product_list_vars += PRODUCT_DEL_PACKAGES
--- a/build/make/core/main.mk
+++ b/build/make/core/main.mk
@@ -1269,6 +1269,7 @@ define product-installed-files
$(eval ### Filter out the overridden packages and executables before doing expansion) \
$(eval _pif_overrides := $(call module-overrides,$(_pif_modules))) \
$(eval _pif_modules := $(filter-out $(_pif_overrides), $(_pif_modules))) \
+ $(eval _pif_modules := $(filter-out $(PRODUCT_DEL_PACKAGES), $(_pif_modules))) \
$(eval ### Resolve the :32 :64 module name) \
\build\make\core 文件夹下main.mk ,仿写过滤

第三步:
调用该函数
在base.mk文件内
参考网址:base
专家
Android13 系统裁剪
Android 13 demo
--- a/build/make/core/main.mk
+++ b/build/make/core/main.mk
@@ -1265,6 +1265,9 @@ define product-installed-files
$(eval ### Filter out the overridden packages and executables before doing expansion) \
$(eval _pif_overrides := $(call module-overrides,$(_pif_modules))) \
$(eval _pif_modules := $(filter-out $(_pif_overrides), $(_pif_modules))) \
+ $(eval ### Filter out apps that customers don't need) \
+ $(eval _pif_deletes := $(call get-product-var,$(1),PRODUCT_DEL_PACKAGES)) \
+ $(eval _pif_modules := $(filter-out $(_pif_deletes), $(_pif_modules))) \
$(eval ### Resolve the :32 :64 module name) \
$(eval _pif_modules := $(sort $(call resolve-bitness-for-modules,TARGET,$(_pif_modules)))) \
$(call expand-required-modules,_pif_modules,$(_pif_modules),$(_pif_overrides)) \
+++ b/build/make/core/product.mk
@@ -211,6 +211,8 @@ _product_single_value_vars += PRODUCT_SYSTEM_DLKM_BASE_FS_PATH
# The first API level this product shipped with
_product_single_value_vars += PRODUCT_SHIPPING_API_LEVEL
+# Delete unnecessary APKs this product
+_product_single_value_vars += PRODUCT_DEL_PACKAGES
Android 14 已经自带 PRODUCT_REMOVE_PACKAGES
./build/make/core/main.mk:1267:$(warning PRODUCT_REMOVE_PACKAGES = $(PRODUCT_REMOVE_PACKAGES))
./build/make/core/main.mk:1282: $(eval _pif_removes := $(call get-product-var,$(1),PRODUCT_REMOVE_PACKAGES)) \
./build/make/core/product.mk:51:_product_list_vars += PRODUCT_REMOVE_PACKAGES
build/make/core/main.mk
$(eval ### Filter out the overridden packages and executables before doing expansion) \
$(eval _pif_overrides := $(call module-overrides,$(_pif_modules))) \
$(eval _pif_modules := $(filter-out $(_pif_overrides), $(_pif_modules))) \
$(eval _pif_removes := $(call get-product-var,$(1),PRODUCT_REMOVE_PACKAGES)) \
$(eval _pif_modules := $(filter-out $(_pif_removes), $(_pif_modules))) \
$(eval ### Resolve the :32 :64 module name) \
$(eval _pif_modules := $(sort $(call resolve-bitness-for-modules,TARGET,$(_pif_modules)))) \
Android R 替换低版本webView
国外的一些apk一般都需要用到webView来显示界面,如果当前设备的webView版本过低,
可以会出现进入app,显示空白或者直接闪退,卡死等情况.
如何升级系统内的webView?
1.替换系统内预置的webView,换成高版本
2.客户需要使用什么版本的WebView,自行下载然后固件将客户下载的版本作为默认版本
webview 的lib库也要复制,改名webview.apk 为webview.zip ,解压获取需要的lib库。
A.替换
+++ b/device/rockchip/rk356x/device.mk
+# deletes unnecessary APKs 先删除系统原来的webview
+PRODUCT_DEL_PACKAGES += \
+ webview \
+
+# update webview.apk 再将新版本的webView copy 进入 system/app/
+PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,vendor/xx/apps/googlewebView/*,$(TARGET_COPY_OUT_SYSTEM)/app)
xxx@root$ ls -al vendor/xx/apps/googleweb_113/googleweb_113/
total 211816
drwxrwxr-x 3 liu liu 4096 Jan 11 01:52 .
drwxrwxr-x 3 liu liu 4096 Jan 11 01:52 ..
-rwxrwxr-x 1 liu liu 217061285 Jan 11 01:52 googleWebview_113.apk
drwxrwxr-x 3 liu liu 4096 Jan 11 01:52 lib
//更换默认读取webView的方式,默认用com.google.android.webview
+++ b/frameworks/base/core/res/res/xml/config_webview_packages.xml
@@ -16,6 +16,6 @@
<webviewproviders>
<!-- The default WebView implementation -->
- <webviewprovider description="Android WebView" packageName="com.android.webview" availableByDefault="true">
+ <webviewprovider description="Android WebView" packageName="com.google.android.webview" availableByDefault="true">
</webviewprovider>
B.客户需要使用什么版本的WebView,自己下载
WebView update demo

浙公网安备 33010602011771号