記錄日常問題
清理make clean; make clobber 更嚴格。
1 替換framework.jar不起作用
使用nexus 燒錄system後,單獨替換framework.jar不起作用。
研究出兩種解決方案。親自測試有效。
第一種方法:不編譯優化成odex
默認情況在linux編譯系統 會開啓odex的。
build/make/core/dex_preopt.mk
# The default values for pre-opting: always preopt PIC.
# Conditional to building on linux, as dex2oat currently does not work on darwin.
ifeq ($(HOST_OS),linux)
WITH_DEXPREOPT ?= true
# For an eng build only pre-opt the boot image. This gives reasonable performance and still
# allows a simple workflow: building in frameworks/base and syncing.
ifeq (eng,$(TARGET_BUILD_VARIANT))
WITH_DEXPREOPT_BOOT_IMG_ONLY ?= true
endif
# Add mini-debug-info to the boot classpath unless explicitly asked not to.
ifneq (false,$(WITH_DEXPREOPT_DEBUG_INFO))
PRODUCT_DEX_PREOPT_BOOT_FLAGS += --generate-mini-debug-info
endif
endif
我們可以將WITH_DEXPREOPT修改成false,具體位置:
build/make/core/dex_preopt.mk 或者device/對應板級/BoardConfig.mk。
然後清理out目錄,重新編譯系統燒錄,之後可以單獨編譯framework替換。
adb root
adb remount
adb push framework.jar /system/framework/
adb shell reboot
第二種方法:不刪除dex文件。
默認DEX_PREOPT_DEFAULT爲true,會刪除apk、jar包中的classes.dex文件。值爲nostripping時,不刪除,這樣編譯的framework.jar不會只是1kb左右。
# The default value for LOCAL_DEX_PREOPT
DEX_PREOPT_DEFAULT ?= true
修改方式:
WITH_DEXPREOPT保持爲true,使用odex優化。
修改DEX_PREOPT_DEFAULT,設爲nostripping。
如果有板級,可以在device/對應板級/BoardConfig.mk中添加,或者在
build/make/core/dex_preopt.mk
最好使重新編譯系統鏡像燒錄,之後單獨編譯framework後。
adb root
adb remount;
adb push framework.jar /system/framework/
adb shell
cd /system/framework/
rm arm/boot-framework*
rm arm64/boot-framework*
adb shell reboot
其他一些使用的指令
設置不編譯優化成odex:
1 .make showcommands WITH_DEXPREOPT=false
或者mm WITH_DEXPREOPT=false
2 單獨模塊 Android.mk添加LOCAL_DEX_PREOPT := false
2 adb disable-verity
重新燒錄系統後,adb remount報以下錯誤:
Use "adb disable-verity" to disable verity.
If you do not, remount may succeed, however, you will still not be able to write to these volumes.
remount succeeded
雖然顯示remount succeeded,但是依然不能寫成功。
adb disable-verity
adb reboot
//重啓後
adb root
adb remount
3 unknown package name of class file
framework 下面添加了一些新的java文件。報錯:unknown package name of class file。
在build/core/tasks/check_boot_jars/package_whitelist.txt
查看該文件發現PRODUCT_BOOT_JARS的其他jar的包名都有在這裏定義,仿照文件格式把自己的包名添加到這裏,重新編譯ok!
4 fastboot 燒錄指令
Android手機分區(每個分區都有相應的img文件對應):開機啓動畫面區(splash1),數據恢復區(recovery),內核區(boot),
系統區(system),數據緩存區(cache),用戶數據區(userdata)。
//進入bootloader模式
adb reboot bootloader
//查找設備
fastboot devices
//燒寫多個分區(boot recovery system vendor),並自動重啓
export ANDROID_PRODUCT_OUT=/home/py/android8.0/out/target/product/angler
fastboot flashall
//單獨燒寫某個img
//刷寫boot
fastboot flash boot boot.img
//刷寫recovery
fastboot flash recovery recovery.img
//刷寫system
fastboot flash system system.img
//刷寫userdata
fastboot flash userdata userdata.img
//重啓
fastboot reboot
5 設置系統語言默認爲中文
1.android 系統的默認語言配置文件路徑如下:
build/make/target/product/full_base.mk
在文件中找到變量 “PRODUCT_LOCALES”
然後修改爲如下形式即可:
PRODUCT_LOCALES := zh_CN
2.刪除多餘的語言包
配置文件路徑如下:
build/make/target/product/locales_full.mk
在文件中找到變量"PRODUCT_LOCALES"
把不需要的語言刪除就好,例如:
PRODUCT_LOCALES := en_US zh_HK zh_CN
6 nexus 8.0刷機,重啓後時間和上次時間不一致,差別大。
燒錄vendor.img後,重啓時間沒有問題。
以angler OPR6.170623.0.19爲例
./extract-qcom-angler.sh
//輸入I ACCEPT
./extract-huawei-angler.sh
//輸入I ACCEPT
之後make編譯會編譯出vendor.img.燒錄即可。
7 nexus 8.0刷機,自動確定日期和時間無效
adb shell settings put global ntp_server ntp7.aliyun.com
然後重啓設備。
8 nexus 8.0連接WiFi成功,但提示“已連接 但無法訪問互聯網”
adb shell settings put global captive_portal_https_url https://www.google.cn/generate_204
重啓或者開關飛行模式。
9 nexus 8.0 設置日期彈框以2007.1.1開始
設置-日期和時間-設置日期–彈框默認使2007.01.01,修改成2020.0101.
package/apps/Settings/src/com/android/settings/datetime/DatePreferenceController.java