参考文档,有些内容须要根据具体的状况作修改,请知悉
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-打开