项目客制化文档

参考文档,有些内容须要根据具体的状况作修改,请知悉

项目准备工做

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] 跳转到包含某个文件的目录

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 = 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

参考凌春光的文档《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

添加如下两个宏的时候可能会致使开机异常,没法经过GMS,如铃声不响、开机流程异常等,须要确认清楚

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…

apn 参数修改

device/mediatek/config/apns-conf.xml

添加小区广播

google:     MTK_ETWS_SUPPORT   
MTK:        MTK_CMAS_SUPPORT
复制代码

OTA

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平台

android O版本打开人脸识别

设置-高级功能-手势操做-智能唤醒 须要哪些手势

修改密度

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
复制代码

客制化桌面图标

juejin.im/post/5cd8e3…

调节桌面布局和hotset的距离

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)

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_devic
         AudioALSAANCController::getInstance()->setSpeakerEnabled(true);
 #endif
         OpenSpeakerPath(SampleRate);
+        usleep(1000*X); //添加延时X(能够修改成100)毫秒
     }

复制代码

添加手动写IMEI号的指令

FreemeSpecialCharSequenceMgr.java中添加

.build("*#*#1122#*#*", "com.freeme.intent.action.IMEI_SETTING", "alternative.imei_setting") // Imei setting

去掉设置中的投射(cast)功能

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
复制代码

修改谷歌文件夹里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…

一、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,具体方法以下:

一、首先根据客户提供的信息,确认关闭的log tag,好比MtkOmxMVAMgr/Acodec/MtkCam

二、在代码中搜索相关内容 cgrep "LOG_TAG \"ACodec\"",可是有的log是在so库中的,没法关闭,好比MtkOmxMVAMgr

三、打开相关文件,将相关内容注释便可 // #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.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;
    //*/


复制代码

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);
    }

复制代码

第三方应用白名单

juejin.im/post/5d106b…

android9.0灭屏收到短信唤醒亮屏

juejin.im/post/5d106b…

自定义PTT键

juejin.im/post/5d106b…

MTK FMRadio 修改工做频率范围的方法

juejin.im/post/5d106b…

修改时区

www.jianshu.com/p/03b6c8c34…

FOTA差分包制做流程相关

www.jianshu.com/p/d24648a87…

近斯任务界面的的文字有很严重的锯齿

packages/apps/Launcher3/quickstep/src/com/android/quickstep/views/RecentsView.java

RecentsView():

+ mEmptyMessagePaint.setAntiAlias(true);
复制代码

O1版原本短信时点亮屏幕

juejin.im/post/5d26a7…

mtk的Music在歌曲列表,AGO版本,音乐-艺术家/专辑界面选择歌曲点击删除闪退100%,歌曲/播放列表界面点击删除无权限没法删除,也没法设置用做手机铃声

没有获取到写权限,可参考 http://10.20.40.21:8081/#/c/TYD/platforms/android-27/ALPS-MP2-O1-6580/platform/vendor/+/10176/

圆点通知不显示

须要设置:长按桌面-Home settings- Notification dots-打开

待更新

相关文章
相关标签/搜索