项目客制化文档
參考文檔,有些內容需要根據具體的情況做修改,請知悉
項目準備工作
1)提前瀏覽一下需求,確認是否有功能性需求以及一些疑難雜癥。
跟項目經理確認清楚每一條需求,不可似是而非。
需跟項目經理確認該需求是之前的需求還是新增需求,如果是之前的需求,需要找到之前的負責人,詢問該需求進度,如未處理,需跟項目經理說明具體情況,并給出開發周期,看能否接受,同時咨詢一下大概的量產時間,做到心中有數。
2)不定時的看看公版是否增加了新功能,客戶項目同步公版代碼。
更新公版代碼后須告知驅動,否則驅動調試編譯的時候可能會報錯,這樣不僅浪費驅動的時間,也延誤了自己出版本的時間。
3)如果是GMS項目,如果確認客戶需求是否有違背GMS要求的,及時跟客戶溝通。
4)如果需求較多,建議在晚上下班時間編一個debug的版本,第二天來作為調試使用,能節約大量的修改調試時間。
CTS相關失敗項
juejin.im/post/5cf60e…
創建主板
使用腳本
source build/envsetup.sh
clone_project A B
A是base版本,B是new版本
創建新項目的步驟
1)新建一個客戶基本都在droi目錄下配置
2)根據郵件信息來參考copy那個項目,例如參考A,建B
3)copy A to B
4)修改copy出來的項目里面的所有客戶名字
3.1,進入B文件夾;3.2,grep -r A *,修改所有A為B;3.3,Ctrl + f 查找A,出來的文件的名字A改為B;3.4,打開ProjectConfig.mk;3.5,查看CUSTOM_MODEM=?3.6,查看TYD_MMI_FLASH_TYPE = ?3.7,查看google的gms包是否是要求的:TYD_MMI_GOOGLE_APPS_VERSION = R83.8,其他的按客戶需求修改; 復制代碼5)如果沒有參考的,直接copy一個相同配置的項目(最好是公版的,如果沒有自行參考),去掉others文件夾
6)這樣一個客戶就基本完成,可以提交了
創建新項目需要提交的文件
1)ProjectConfig.mk : 從device/droi/主板目錄/ProjectConfig.mk 拷貝并修改相應的宏
2)debug_defconfig/defconfig : 從kernel-3.18/arch/arm{arm64}/configs/主板名_debug_defconfig和主板名_defconfig拷貝修改文件名字并修改相關配置
3)lk.mk : 從vendor/mediatek/proprietary/bootable/bootloader/lk/project/主板名.mk拷貝修改文件名字并修改相關配置
編譯modem
參考凌春光的文檔《modem編譯流程》
配置Modem
1)根據項目的配置表,確認modem的配置
2)如果相對應配置的modem在vendor/mediatek/proprietary/modem目錄下是否存在,如果不存在則需要編譯modem,并將編譯好的modem放到vendor/mediatek/proprietary/modem目錄。
3)在ProjectConfig.mk文件中配置CUSTOM_MODEM宏: CUSTOM_MODEM = pwd3_125
配置FlASH
1)根據項目的配置表,確認flash的配置
2)根據配置在vendor/mediatek/proprietary/bootable/bootloader/preloader/freeme_flash_type目錄下找相對應的文件夾,并將名字賦給ProjectConfig.mk文件中的FREEME_FLASH_TYPE。
3)online.mediatek.com/FAQ#/SW/FAQ…
版本號如何設置
《TYZN-PCBA軟件版本命名規范及項目命名規則V3.2.pdf》
鏈接:pan.baidu.com/s/1yypCsn_v…
MTK_CLEARMOTION_SUPPORT
添加以下兩個宏的時候可能會導致開機異常,如鈴聲不響、開機流程異常等,需要確認清楚
MTK_CLEARMOTION_SUPPORT = yes
MTK_MIRAVISION_SETTING_SUPPORT = yes
遇到無法解決的問題,如何提eservice給MTK?
www.jianshu.com/p/72ab3dd82…
如何兼容新的flash
www.jianshu.com/p/ab14fb772…
如何編譯分離式Flash 工廠軟件
www.jianshu.com/p/d6dfc4e77…
屏幕亮度設置
SettingsProvider/res/values/defaults.xml 中設置 def_screen_brightness
多媒體,鬧鐘,來電鈴聲,通話聲音音量調整
P0: AudioService.java 中:
AudioSystem.STREAM_VOICE_CALL AudioSystem.STREAM_MUSIC AudioSystem.STREAM_ALARM AudioSystem.STREAM_RING AudioSystem.STREAM_SYSTEM復制代碼桌面菜單全透明
- http://10.20.40.17:8080/#/c/86151/
客制化桌面圖標
juejin.im/post/5cd8e3…
默認可以旋轉桌面
def_accelerometer_rotation 設置為 true
allow_rotation 設置為 true
桌面壁紙縮放的問題
將提供的壁紙文件,右鍵選擇更改大小,選擇像素,根據屏幕尺寸大小修改后,將改好的壁紙放在frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.png
系統第一次啟動時沒有wallpaper_info.xml信息規定大小,就會已顯示屏分辨率長寬的最大值最為壁紙的長和框,舉個例子:屏幕分辨率為480*800,則生成的wallpaper_info.xml信息為800*800,若壁紙長寬皆大于800,則會取0-480和0-800的長寬作為默認壁紙,若壁紙為480*800,則左右個補全160,生成為800*800的壁紙,因此也導致壁紙產生偏移,若是長寬皆小于800,好像會設置失敗,延用之前的壁紙,這里沒搞太懂。 那如何設置正確的默認壁紙,我的做法是將480*800的壁紙做成800*800的大小,前480*800為默認壁紙,后320為底色,這樣就不會被裁剪或生成偏移了。
桌面左右滑動
去掉二級菜單,只保留一級菜單,左右滑動:
http://10.20.40.21:8081/#/c/TYD/platforms/android-28/ALPS-P0-MP1-6739/project/droi_a9/+/1956/
freeme相機增加美顏
freemeCamConfig.xml: CAMERA_FACE_BEAUTY_SHOW、CAMERA_FRONT_FACE_BEAUTY_SHOW設為true
freeme相機增加背景虛化功能
freemeCamConfig.xml: CAMERA_BACKGROUND_VIRTUAL_SUPPORT設為true
開啟觸屏提示音,短音源第一聲Speaker無法聽到
mediatek/proprietary/hardware/audio/common/V3/aud_drv/AudioALSAHardwareResourceManager.cpp @@ status_t AudioALSAHardwareResourceManager::startOutputDevice_l(const audio_devicAudioALSAANCController::getInstance()->setSpeakerEnabled(true);#endifOpenSpeakerPath(SampleRate); + usleep(1000*X); //添加延時X(可以修改為100)毫秒}復制代碼添加手動寫IMEI號的指令
FreemeSpecialCharSequenceMgr.java中添加
.build("*#*#1122#*#*", "com.freeme.intent.action.IMEI_SETTING", "alternative.imei_setting") // Imei setting
關機電池動畫位置
vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/ vendor/mediatek/proprietary/external/libshowlogo/cust_display.h 復制代碼修改谷歌文件夾里app名字顏色
修改下拉狀態欄透明度
vendor/mediatek/proprietary/packages/apps/SystemUI/res/color/qs_background_dark.xml 復制代碼修改狀態欄圖標位置
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java vendor/mediatek/proprietary/packages/apps/SystemUI/res/layout/status_bar.xml vendor/mediatek/proprietary/packages/apps/SystemUI/res/layout/keyguard_status_bar.xml(鎖屏時不顯示) 復制代碼工廠模式硬件信息增加fingerprint
private final String getHwInfos() {.....String fingerprint = android.os.SystemProperties.get("ro.hardware.fingerprint", "null");if (fingerprint != "null") {infos.append("[ fingerprint ]:\n" + fingerprint + "\n");}return infos.toString();} 復制代碼內置apk
juejin.im/post/5cd411…
1、apk不含so文件 將APK放入文件夾內,改名為:yourModuleName.apk(mk文件中的yourModuleName)。Android.mk文件與apk文件同級。
Android.mk內容如下:
LOCAL_MODULE_TAGS 是指定在什么版下才會編譯這個Android.mk user: 指該模塊只在user版本下才編譯 eng: 指該模塊只在eng版本下才編譯 tests: 指該模塊只在tests版本下才編譯 optional:指該模塊在所有版本下都編譯 LOCAL_MODULE_SUFFIX 是指文件后綴.apk LOCAL_CERTIFICATE指apk的簽名,可以有:testkey、media、platform、shared,如果文件已經簽過名,則使用PRESIGNED。 LOCAL_MODULE_PATH 指你要安裝的apk的路徑。 $(TARGET_OUT)/priv-app這個路徑下,apk不可卸載。 $(TARGET_OUT_DATA_APPS)這個路徑下apk卸載后不再恢復 $(TARGET_OUT)/vendor/operator/app這個路徑下apk卸載后恢復出廠設置可以恢復apk 復制代碼Android P(9.0) userdebug版本執行adb remount
android P版本后google啟用avb(Android Verified Boot)2.0,verified boot and DM-verity默認啟用策略發生了變化
* Android P + kernel-4.4 or kernel-3.18 - download preloader with verified boot disabled which location is the same as scatter file //preloader_<PROJECT>_SBOOT_DIS.bin - adb root - adb disable-verity - adb reboot - adb root - adb remount* Android P + kernel-4.9 or after - download preloader with verified boot disabled which location is the same as scatter file. //preloader_<PROJECT>_SBOOT_DIS.bin - boot to Home Screen - go to setting -> system -> Developer options -> OEM unlocking - adb reboot bootloader - fastboot flashing unlock - press volume up key - fastboot reboot - adb root - adb disable-verity - adb reboot - adb root - adb remount復制代碼將鎖屏方式默認為None
SettingsProvider/res/values/defaults.xml
def_lockscreen_disabled 設置為true
更新開關機動畫
參考FAQ10590制作開關機動畫壓縮文件。
注意點:制作好動畫后,選中folder1文件夾、folder2文件夾和desc.txt,郵件壓縮,壓縮文件格式.zip,壓縮方式選擇存儲。 切忌多一層bootanimation文件夾。
制作好的壓縮文件放在droi下對應的工程目錄下。
關閉特定的Log
有時客戶會要求關閉特定的log,大多是底層的log,具體方法如下:
1、首先根據客戶提供的信息,確認關閉的log tag,比如MtkOmxMVAMgr/Acodec/MtkCam
2、在代碼中搜索相關內容 cgrep "LOG_TAG \"ACodec\"",但是有的log是在so庫中的,無法關閉,比如MtkOmxMVAMgr
3、打開相關文件,將相關內容注釋即可 // #define LOG_TAG "ACodec"
User版本的root權限
juejin.im/post/5cd249…
如何配置全球通和非全球通客戶
modem的AP端配置
www.jianshu.com/p/de7327037…
緊急聯系人功能
設置緊急聯系人,并且可以通過長按音量+和音量-來撥打緊急聯系人號碼
http://10.20.40.21:8081/#/c/TYD/platforms/android-28/ALPS-P0-MP1-6739/project/droi_pd3d/+/1508/
新項目無法登陸Google account
www.jianshu.com/p/943939173…
源碼編譯錯誤問題定位
可以在log中查找以下幾個關鍵字:
ERROR:、FAILED:、String ERROR
調整桌面圖標的行之間距離
applist layout:
packages/apps/Launcher3/src/com/android/launcher3/DeviceProfile.javaupdateIconSize(float scale, Resources res, DisplayMetrics dm)://*/update applist layoutallAppsCellHeightPx = allAppsIconSizePx + allAppsIconDrawablePaddingPx+ Utilities.calculateTextHeight(allAppsIconTextSizePx)+ allAppsIconDrawablePaddingPx * 3; /*/allAppsCellHeightPx = getCellSize().y; //*/ 復制代碼workspace layout:
packages/apps/Launcher3/src/com/android/launcher3/DeviceProfile.javaupdateWorkspacePadding()://*/ZY.zhanglin,20190301. update workspace layoutint paddingBottom = hotseatBarSizePx ;/*/int paddingBottom = hotseatBarSizePx + verticalDragHandleSizePx;//*/復制代碼google 文件夾圖標有毛邊
Launcher3/src/com/android/launcher3/folder/PreviewBackground.java 將半徑增大4:private void drawCircle(Canvas canvas,float deltaRadius) {float radius = getScaledRadius();canvas.drawCircle(radius + getOffsetX(), radius + getOffsetY(),(radius - deltaRadius) + 4, mPaint);}復制代碼第三方應用白名單
很多出貨國內要使用freeme os的客戶,比如天龍世紀、南極星,基本都要內置某個對講類的app。由于 freeme os的對第三方應用的限制很多,內置這些應用時需要注意解除一些限制,保證此類app功能正常運行。
針對freeme 8.1 (android O1)總結如下:
1、默認賦予該應用申請的所有權限
vendor/freeme/frameworks/base/data/etc/default-permissions-freeme.xml 具體寫法可參考該文件的內容,比如: <exception package="com.ctchat.sample" type="" trust="true" > </exception> 復制代碼2、設置-應用-自啟動管理,默認打開開關后臺服務才能收到開機廣播或者其他廣播
vendor/freeme/packages/providers/FreemeConfigProvider/RRO/res/values/arrays.xml,添加item即可默認打開 <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="config_atlas_custom_white_list" translatable="false"> <item>com.ctchat.sample</item> </string-array> </resources> 復制代碼3、點擊最近應用里的清理會殺死不帶鎖的應用,需要默認上鎖
vendor/freeme/packages/providers/FreemeSettingsProvider/res/values/defaults.xml <string name="def_sysui_recent_locked_tasks" translatable="false">com.ctchat.sample</string> 復制代碼4、桌面一鍵清理、設置-安全中心里的懸浮窗管理和通知管理,這三項都需要找負責安全中心來客制,他會提供給你以下文件去override即可
vendor/freeme/packages/apps/security/Security/default_local_config
5、進程保活,低內存時不輕易被系統殺掉
vendor/freeme/frameworks/base/core/java/com/freeme/internal/util/FreemeCustomizedOom.java private static final Map<String, Integer> DEFAULT_APP_ADJ_MAP = new HashMap<String, Integer>() {{put("com.ctchat.sample", HEAVY_WEIGHT_APP_ADJ); }}; 復制代碼MTK FMRadio 修改工作頻率范圍的方法
全球大部分國家的調頻廣播頻率范圍基本都是87.5-108.0 Mhz,但也有些例外,比如日本的為76.0-90.0Mhz。
mtk平臺默認都是87.5-108.0Mhz,如果該機型銷往日本,那么我們就需要修改FM頻率范圍。
MTK已經預留好宏和變量,改個值就好,代碼是基于O的,但是這一塊基本沒什么變化,O之前以及之后應該也是適用的,可能文件路徑會有改變
1、device/mediatek/common/kernel-headers/linux/fm.h 找到以下宏修改如下
#define FMR_BAND 3 //FM radio band, 1:87.5MHz~108.0MHz; 2:76.0MHz~90.0MHz; 3:76.0MHz~108.0MHz; 4:special #define FMR_BAND_FREQ_L 760 //FM radio special band low freq(Default 87.5MHz) #define FMR_BAND_FREQ_H 1080 //FM radio special band high freq(Default 108.0MHz)#define FM_BAND_DEFAULT FM_BAND_JAPANW#define FM_RAIDO_BAND FM_BAND_JAPANW 復制代碼2、vendor/mediatek/proprietary/packages/apps/FMRadio/src/com/android/fmradio/FmUtils.java
修改如下幾個變量
// maximum station frequency private static final int HIGHEST_STATION = 1080; // minimum station frequency private static final int LOWEST_STATION = 760; // maximum station frequency 50khz private static final int HIGHEST_STATION_50KHZ = 10800; // minimum station frequency 50khz private static final int LOWEST_STATION_50KHZ = 7600; 復制代碼修改時區
www.jianshu.com/p/03b6c8c34…
FOTA差分包制作流程相關
www.jianshu.com/p/d24648a87…
近斯任務界面的的文字有很嚴重的鋸齒
packages/apps/Launcher3/quickstep/src/com/android/quickstep/views/RecentsView.javaRecentsView():+ mEmptyMessagePaint.setAntiAlias(true); 復制代碼待更新
總結
- 上一篇: Dash币中PrivateSend 的过
- 下一篇: 第二部分 单机以及编队控制实验—初级教程