參考文檔,有些內容須要根據具體的狀況作修改,請知悉
1)提早瀏覽一下需求,確認是否有功能性需求以及一些疑難雜症。java
跟項目經理確認清楚每一條需求,不可似是而非。android
需跟項目經理確認該需求是以前的需求仍是新增需求,若是是以前的需求,須要找到以前的負責人,詢問該需求進度,如未處理,需跟項目經理說明具體狀況,並給出開發週期,看可否接受,同時諮詢一下大概的量產時間,作到心中有數。canvas
2)不定時的看看公版是否增長了新功能,客戶項目同步公版代碼。瀏覽器
更新公版代碼後須告知驅動,不然驅動調試編譯的時候可能會報錯,這樣不只浪費驅動的時間,也延誤了本身出版本的時間。bash
3)若是是GMS項目,若是確認客戶需求是否有違背GMS要求的,及時跟客戶溝通。app
4)若是需求較多,建議在晚上下班時間編一個debug的版本,次日來做爲調試使用,能節約大量的修改調試時間。less
1)每一個客戶需求須要一個一個驗證,若是是驅動的需求,要求驅動發出需求完成郵件(可以讓項目經理去確認)ide
2)版本號是否正確(含內部版本號 跟外部版本號) (試產0.01;CTA 1.01 要編eng;試量產和招商2.01;量產3.01,效果軟件最後加TEST)(若是不確認,發版本前先將版本號發給測試確認)佈局
3)跑一遍工廠模式,看一眼能不能讀到基帶版本和bandpost
4)新加的應用或者本身有改動的應用,要點進去保證不閃退,若是具體修改應用內某個頁面,也要保證該頁面不閃退
5)OTA相關包注意上傳正確,我司的爲full_項目名-target_files-xxx.zip;廣升的爲target_files-package.zip
首先執行 source build/envsetup.sh
cgrep [keyword] 全部C/C++文件執行搜索操做
jgrep [keyword] 全部Java文件執行搜索操做
ggrep [keyword] 全部Gradle文件執行搜索操做
mangrep [keyword] 全部AndroidManifest.xml文件執行搜索操做
mgrep [keyword] 全部Android.mk文件執行搜索操做
sepgrep [keyword] 全部sepolicy文件執行搜索操做
resgrep [keyword] 全部本地res/*.xml文件執行搜索操做
sgrep [keyword] 全部資源文件執行搜索操做
首先執行 source build/envsetup.sh
croot 切換至Android根目錄
cproj 切換至當前模塊的根目錄(Android.mk目錄)
godir [filename] 跳轉到包含某個文件的目錄
使用腳本
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 = R8
3.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編譯流程》
1)根據項目的配置表,確認modem的配置
2)若是相對應配置的modem在vendor/mediatek/proprietary/modem
目錄下是否存在,若是不存在則須要編譯modem,並將編譯好的modem放到vendor/mediatek/proprietary/modem
目錄。
3)在ProjectConfig.mk
文件中配置CUSTOM_MODEM宏: CUSTOM_MODEM = pwd3_125
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》
添加如下兩個宏的時候可能會致使開機異常,沒法經過GMS,如鈴聲不響、開機流程異常等,須要確認清楚
MTK_CLEARMOTION_SUPPORT = yes
MTK_MIRAVISION_SETTING_SUPPORT = yes
device/mediatek/config/apns-conf.xml
google: MTK_ETWS_SUPPORT
MTK: MTK_CMAS_SUPPORT
複製代碼
ADUPS_FOTA_SUPPORT=yes
FREEME_OTA_SUPPORT = no
複製代碼
platform/system / bt/btif/src/btif_dm.cc
//*/xxx, time. Altered product model
char prop_model[PROPERTY_VALUE_MAX];
osi_property_get(PROPERTY_PRODUCT_MODEL, prop_model, "");
osi_property_get("persist.freeme.product.model", prop_model, prop_model);
osi_property_get("ro.build.freeme.bt.name", prop_model, prop_model);
strncpy(btif_default_local_name, prop_model, max_len);
/*/
if (BTM_DEF_LOCAL_NAME[0] != '\0') {
strncpy(btif_default_local_name, BTM_DEF_LOCAL_NAME, max_len);
} else {
char prop_model[PROPERTY_VALUE_MAX];
osi_property_get(PROPERTY_PRODUCT_MODEL, prop_model, "");
strncpy(btif_default_local_name, prop_model, max_len);
}
//*/
複製代碼
80平臺:
39平臺
device/droi/projectxxx/device.mk
PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.sf.lcd_density=
Android O:
一、vendor/freeme/packages/apps/PartnerCustomizations/AndroidManifest.xml
<provider android:name=".browser.PartnerHomepageProvider"
android:authorities="com.android.partnerbrowsercustomizations"
+ android:exported="true" />
複製代碼
二、ProjectOption.ini
[com.android.partnercustomizations]
config.homepage=http://www.xxxx.com
複製代碼
Android P:
ProjectOption.ini
[com.android.partnercustomizations]
config.homepage=http://www.xxxx.com
複製代碼
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
複製代碼
override/packages/apps/Launcher3/quickstep/src/com/android/quickstep/views/ShelfScrimView.java
override/packages/apps/Launcher3/res/values-v21/styles.xml
override/packages/apps/Launcher3/src/com/android/launcher3/BaseDraggingActivity.java
override/packages/apps/Launcher3/src/com/android/launcher3/folder/FolderPagedView.java
override/packages/apps/Launcher3/src/com/android/launcher3/views/ScrimView.java
複製代碼
packages/apps/Launcher3/src/com/android/launcher3/DeviceProfile.java
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/
須要將桌面的sdk設置爲當前系統的(navigation bar background color is useless under 24)
freemeCamConfig.xml: CAMERA_FACE_BEAUTY_SHOW、CAMERA_FRONT_FACE_BEAUTY_SHOW設爲true
freemeCamConfig.xml: CAMERA_BACKGROUND_VIRTUAL_SUPPORT設爲true
mediatek/proprietary/hardware/audio/common/V3/aud_drv/AudioALSAHardwareResourceManager.cpp
@@ status_t AudioALSAHardwareResourceManager::startOutputDevice_l(const audio_devic
AudioALSAANCController::getInstance()->setSpeakerEnabled(true);
#endif
OpenSpeakerPath(SampleRate);
+ usleep(1000*X); //添加延時X(能夠修改成100)毫秒
}
複製代碼
FreemeSpecialCharSequenceMgr.java
中添加
.build("*#*#1122#*#*", "com.freeme.intent.action.IMEI_SETTING", "alternative.imei_setting") // Imei setting
vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/SettingsActivity.java
somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
Settings.WifiDisplaySettingsActivity.class.getName()),
false, isAdmin)
|| somethingChanged;
複製代碼
vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/
vendor/mediatek/proprietary/external/libshowlogo/cust_display.h
複製代碼
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(鎖屏時不顯示)
複製代碼
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不含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版本後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
複製代碼
SettingsProvider/res/values/defaults.xml
def_lockscreen_disabled 設置爲true
參考FAQ10590製做開關機動畫壓縮文件。
注意點:製做好動畫後,選中folder1文件夾、folder2文件夾和desc.txt,郵件壓縮,壓縮文件格式.zip,壓縮方式選擇存儲。 切忌多一層bootanimation文件夾。
製做好的壓縮文件放在droi下對應的工程目錄下。
有時客戶會要求關閉特定的log,大可能是底層的log,具體方法以下:
一、首先根據客戶提供的信息,確認關閉的log tag,好比MtkOmxMVAMgr/Acodec/MtkCam
二、在代碼中搜索相關內容 cgrep "LOG_TAG \"ACodec\""
,可是有的log是在so庫中的,沒法關閉,好比MtkOmxMVAMgr
三、打開相關文件,將相關內容註釋便可 // #define LOG_TAG "ACodec"
modem的AP端配置
設置緊急聯繫人,而且能夠經過長按音量+和音量-來撥打緊急聯繫人號碼
http://10.20.40.21:8081/#/c/TYD/platforms/android-28/ALPS-P0-MP1-6739/project/droi_pd3d/+/1508/
能夠在log中查找如下幾個關鍵字:
ERROR:
、FAILED:
、String ERROR
applist layout:
packages/apps/Launcher3/src/com/android/launcher3/DeviceProfile.java
updateIconSize(float scale, Resources res, DisplayMetrics dm):
//*/update applist layout
allAppsCellHeightPx = allAppsIconSizePx + allAppsIconDrawablePaddingPx
+ Utilities.calculateTextHeight(allAppsIconTextSizePx)
+ allAppsIconDrawablePaddingPx * 3;
/*/
allAppsCellHeightPx = getCellSize().y;
//*/
複製代碼
workspace layout:
packages/apps/Launcher3/src/com/android/launcher3/DeviceProfile.java
updateWorkspacePadding():
//*/ZY.zhanglin,20190301. update workspace layout
int paddingBottom = hotseatBarSizePx ;
/*/
int paddingBottom = hotseatBarSizePx + verticalDragHandleSizePx;
//*/
複製代碼
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);
}
複製代碼
packages/apps/Launcher3/quickstep/src/com/android/quickstep/views/RecentsView.java
RecentsView():
+ mEmptyMessagePaint.setAntiAlias(true);
複製代碼
沒有獲取到寫權限,可參考 http://10.20.40.21:8081/#/c/TYD/platforms/android-27/ALPS-MP2-O1-6580/platform/vendor/+/10176/
須要設置:長按桌面-Home settings- Notification dots-打開