项目客制化文档

参考文档,有些内容需要根据具体的情况做修改,请知悉

项目准备工作

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

添加以下两个宏的时候可能会导致开机异常,如铃声不响、开机流程异常等,需要确认清楚

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

复制代码

桌面菜单全透明

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…

默认可以旋转桌面

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

关机电池动画位置

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

复制代码

第三方应用白名单

很多出货国内要使用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.java

RecentsView():

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

待更新

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值