赞
踩
Svn co svn://172.16.0.248/mtk72-kk
Svn co svn://172.16.0.248/mtk6582-kk
Svn co svn://172.16.0.205/workdir/MTK-6572
Svn co svn://172.16.0.248/mtk6582
Svn co svn://172.16.0.248/idh7731 展讯
1.新建工程
1>bootable/bootloader/lk/project/m801.mk
2>build/target/product/m801.mk
3>mediatek/config/m801/projectconfig.mk
4>mediatek/custom/m801
5>vendor/mediatek/m801
make[2]: *** [out/target/product/m715_torque/obj/PACKAGING/systemimage_intermediates/system.img] 错误 2557>vendor/otot_custom
8>mediatek/custom/common/lk/logo/wvga
9>build/tools/buildinfo.sh
重点:修改里面与M801相关的文件
最终:把PROJECT_M801_SUPPORT=yes这个宏加进(ProjectConfig.mk)里
原始的:PROJECT_M801_CELKON_SUPPORT=no
2.更换调屏驱动
1>在该路径下添加驱动包,即相关文件夹
Alps/mediatek/custom/common/uboot/lcm/hx8389b_qhd_dsi_vdo_82.c
alps/mediatek/custom/common/kernel/lcm/hx8389b_qhd_dsi_vdo_82.c
Alps/mediatek/custom/common/lk/lcm/hx8389b_qhd_dsi_vdo_82.c
//LCM驱动程序
LCM_DRIVER hx8389b_qhd_dsi_vdo_82_lcm_drv =
{
.name = "hx8389b_qhd_dsi_vdo_82_lcm_drv",
.set_util_funcs = lcm_set_util_funcs,
.get_params = lcm_get_params,
.init = lcm_init,
.suspend = lcm_suspend,
.resume = lcm_resume,
.compare_id = lcm_compare_id,
.esd_check = lcm_esd_check,
.esd_recover = lcm_esd_recover,
.update = lcm_update,
};
#define FRAME_WIDTH (540)
#define FRAME_HEIGHT (960)
#define LCM_ID_HX8389 (0x89)
2>alps/mediatek/custom/common/kernel/lcm/mt65xx_lcm_list.c
extern LCM_DRIVER hx8389b_qhd_dsi_vdo_82_lcm_drv;
LCM_DRIVER* lcm_driver_list[] =
{
#if defined(HX8389B_QHD_DSI_VDO_82)
&hx8389b_qhd_dsi_vdo_82_lcm_drv,
#endif
}
3>alps/mediatek/config/m707_ddr2/ProjectConfig.mk
Build_lk=yes
Build_uboot=yes
Boot_logo=wvga
Custom_uboot_lcm=hx8379c_dsi_vdo_6572
Custom_kernel_lcm=hx8379c_dsi_vdo_6572
Custom_lk_lcm=hx8379c_dsi_vdo_6572
Lcm_width=480
Lcm_height=800
3.修改Flash,频段
Mediatek/custom/m801/preloader/inc/custom_MemoryDevice.h
4.修改Modem
1>alps/Mediatek/custom/common/modem
2>在ProjectConfig.mk添加宏
CUSTOM_MODEM=MBK72_WET_JB3_HSPA_BAND2_BAND5
5.修改手机型号、名称、设备名、厂商、品牌、蓝牙名称、usb硬件名称、wifi热点名称
Build/tools/buildinfo.sh
ro.product.model=Aplus Gen4
ro.product.name=Aplus Gen4
ro.product.device=Android
ro.product.manufacturer=Aplus Gen4
ro.product.brand=Aplus
alps/mediatek/config/m715_emmc/custom.conf
bluetooth.HostName = Aplus Gen4 //蓝牙名称
wlan.SSID = Aplus Gen4 //wifi热点名称
//USB名称
alps/kernel/drivers/usb/gadget/f_mass_storage
#elif PROJECT_M715_EMMC_SUPPORT
sprintf(common->inquiry_string, "%s", "Aplus Gen4");
//WIFI名称
Frameworks/base/wifi/java/android/net/wifi/p2p/wifip2pservice.java
String value=android.os.SystemProperties.get(“ro.custom.m803”,”no”);
If(value.equals(“yes”)){
Return “Q-Smart Qs470”;
}
6.虚拟拨号键布局偏移
alps/packages/apps/contacts/src/com/mediatek/contacts/widget/ButtonGridLayout.java
(R.dimen.button_grid_layout_button_height);
mWidthInc = mButtonWidth-20; //update here
mHeightInc = mButtonHeight;
7.屏保状态下时钟显示缺陷
alps/frameworks/base/core/res/res/values-hdpi/dimens.xml
<resources>
<!-- Height of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) -->
<dimen name="keyguard_security_height">180dp</dimen>
</resources>
8.修改系统默认亮度(Brightness)
Description:设置-显示-亮度
alps/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
//Default screen brightness ,from 0 to 255,102 is 40%.
<integer name="def_screen_brightness">102</integer>
9.修改系统默认字体大小
alps/frameworks/base/core/java/android/content/res/Configuration.java
//如果把默认字体改为超大,把fontScale值改为1.15f,然后重新build framework.jar模块
public void setToDefaults(
fontScale=1.15f;//normal value is 1
mcc=mnc=0;
)
//Settings中系统的字体大小
alps/packages/apps/Settings/res/values/arrays.xml中,entryvalues_font_size值
small:0.9
normal:1.0
large:1.1
extra large:1.15
10.Android系统版本升级
./mk -o=TARGET_BUILD_VARIANT=user m715_toyque otapackage 打包
MTK-6572/out/target/product/m715_toyque/obj/PACKAGING/target_file_intermediates/m715_toyque-target_files-user.zhu.zip
拷贝到MTK-6572/ota目录下,并且把m715_toyque-target_files-user.zhu.zip 重命名为:old.zip
./build/tools/releasetools/ota_from_target_files -k build/target/product/security/testkey -i ota/old.zip ota/new.zip ota/update.zip
11.修改TP(touchpanel)
alps/mediatek/custom/common/kernel/touchpanel/
12.更改系统默认铃声和短息默认铃声
1>在该路径下新建一个文件(Toruqe)
Alps/framework/base/data/sounds
2>把要添加的默认系统铃声和默认短信铃声放在torque这个文件夹
Alps/framework/base/data/sounds/torque
3>打开torque.mk文件,修改相应需求,如下
Alps/framework/base/data/sounds/torque/torque.mk
4>在m801_torque.mk文件中添加make应用(torque.mk)
Build/target/product/m801_torque.mk
5>在build/target/product/core.mk添加相应引用
13.客制化墙纸
A:把相关的图片复制到以下文件夹
Packages/apps/Launcher3/res/drawable-nodpi(wallpaper_01.jpg,wallpaper_01_small.jpg)
B:vendor/otot_custom/m707_ddr2/custom_res/packages/apps/Launcher3/res/values/wallpapers.xml
默认墙纸
Alps/frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.jpg
14.调节音量键
A:打开这个工具
Mediatek/dct/DrvGen.exe
B:用工具打开文件
Mediatek/custom/m707_ddr2/kernel/dct/dct/codegen.dws
15.手机重启-would you like to Reboot?
alps/frameworks/base/core/res/res/values/strings.xml
<string name="reboot_confirm">"Would you like to Reboot?"</string>
16.打开相机应用-设置-相机设置-Picture size/Preview size(4:3)
A:mediatek/custom/common/kernel/imgsensor/sp0a19
B:mediatek/custom/common/hal/imgsensor/src/sensorlist.cpp
#if defined(SP0A19_YUV)
YUV_INFO(SP0A19_YUV_SENSOR_ID, SENSOR_DRVNAME_SP0A19_YUV,NULL),
#endif
C:mediatek/custom/common/kernel/imgsensor/src/kd_sensorlist.h
#if defined(SP0A19_YUV)
{SP0A19_YUV_SENSOR_ID, SENSOR_DRVNAME_SP0A19_YUV, SP0A19_YUV_SensorInit},
#endif
D:mediatek/custom/common/hal/imgsensor/sp0a19_yuv/config.ftbl.sp0a19_yuv.h
#if 1
//Picture Size
FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
KEY_AS_(MtkCameraParameters::KEY_PICTURE_SIZE),
SCENE_AS_DEFAULT_SCENE(
ITEM_AS_DEFAULT_("1280x960")
E:packages/apps/Camera/res/values/mtk_camera_strings.xml
<string name="pref_camera_picturesize_entry_1280x768">1.3M pixels</string>
Mediatek/custom/common/kernel/imgsensor/imgsensor/kd_imgsensor.h
#define Sensor_drvname_ov8858_mipi_raw_2lane “ov8858_mipi_raw_2lane”
Mediatek/custom/common/kernel/imgsensor/inc/kd_imgsensor.h
#define SENSOR_DRVNAME_OV8858_MIPI_RAW_2LANE "0v8858_mipi_raw_2lane"
17.桌面快捷图标设置
alps/mtk6582-kk/packages/apps/Launcher3/res/xml/default_workspace.xml
18.壁纸居中
alps/packages/apps/launcher3/src/com/android/launcher3/workspace.java
private void updateOffset(boolean force){
if (getChildCount() <= 1) {
LauncherLog.d(TAG, "wallpaperOffset 111");
mWallpaperManager.setWallpaperOffsets(mWindowToken,
/* mWallpaperOffset.getCurrX()*/0.5f, 0.5f);
}else{
LauncherLog.d(TAG, "wallpaperOffset 222");
mWallpaperManager.setWallpaperOffsets(mWindowToken,
mWallpaperOffset.getCurrX(), 0.5f);
}
}
19.桌面-联系人(people)-修改名称(Contacts)
alps/packages/apps/Contacts/res/values/strings.xml
<string name="people">Contacts</string>
20.设置(Settings)-存储(Strorage)
Mediatek/build/tools/ptgen/M6572/ptgen.pl
预置到我们自己的项目里
\mediatek\config\${project}\partition_table_MT65**.xls;
修改值的大小:emmc eng\emmc user
ANDROID size 系统运行需要的内存大小
USRDATA size对应Phone storage
修改时:就改USRDATA
21.工程模式下前摄没反应
alps/mediatek/factory/src/test/ftm_camera.cpp
static int gcamera_autoTest=0; //0:manual mode,1:auto test pattern
22.手机关机-充电-图标位置不对
alps/mediatek/custom/common/lk/include/target/cust_display.h
#if defined(FHD) || defined(CU_FHD) || defined(CMCC_FHD) || defined(CT_FHD) //添加相应的分辨率
// fhd 1080*1920
23.工程模式下-光感不灵敏
alps/mediatek/custom/m801_torque/kernel/alsps/ap3216x/cust_alsps.c
24.相机-默认预览
alps/packages/Camera/src/com/android/camera/CameraSettings.java
25.工程模式-距离感应
alps/mediatek/custom/common/kernel/alsps/ap3216x/ap3216c
#if 0//ndef project_m801_cross_support
databuf[0]=0x20;
databuf[1]=0x05;
26.快速关机-Settings-Accessibility-Quick boot勾掉
alps/frameworks/base/packages/SettingsProvider/res/values/mtk_default.xml
<!--Default for ipo settings-->
<bool name="def_ipo_setting" translatable="false">false</bool>
27.默认铃声音量-Settings-Audio profiles-General-Volumes
alps/frameworks/base/packages/systemui/src/com/android/systemui/usb/StorageNotification.java
public static final int[] DEFAULT_STREAM_VOLUME
28.桌面-默认日期格式
Alps/mediatek/custom/m801_torque/preloader/inc/cust_rtc.h
Alps/mediatek/frameworks/base/res/res/values/config.xml
Alps/frameworks/base/services/java/com/android/server/NetworkTimeUpdateService.java
修改此处:today.set(1, 0, mDefaultYear);
#ifndef _cust_rtc_h_
#define _cust_rtc_h_
[SOLUTION]日期格式选择时,弹出窗口中的日期格式是从R.array.date_format_values中拿到的。
文件:package/apps/Settings/res/values/arrays.xml (所有语言都是这个文件)
描述:
<string-array name="date_format_values" translatable="false">
<!-- The blank item means to use whatever the locale calls for. -->
<item></item>
<item>MM-dd-yyyy</item>
<item>dd-MM-yyyy</item>
<item>yyyy-MM-dd</item>
<item>EE-MMM-d-yyyy</item>
<item>EE-d-MMM-yyyy</item>
<item>yyyy-MMM-d-EE</item>
</string-array>
第一个空的item即为默认的日期格式,请不要修改;
第2-7个对应显示出来的6个日期格式,可以修改,也可以增加新的格式。
需要注意的是,在格式中只能用系统能够识别的字符来制定格式,yyyy是年份,MM是月份,dd是日,EE是星期几。
相关逻辑:
然后,在DateFormat的getDateFormatStringForSetting方法中,对取得的格式进行了处理,对于每一项都会进行替换处理。
比如对于yyyy-MMM-d-EE这个格式,在系统语言为中文时,就会找到
Donottranslate-cldr.xml (mediatek\frameworks\base\res\res\values-zh-rCN)中的下面这一项:
<string name="year_month_day_wday">"%s年 %s %s日, %s"</string>
这样显示到界面上就是“2013年12月31日,星期一”
对于KK版本定义在:
frameworks\base\core\res\res\values-zh-rCN\donottranslate-cldr.xml中的numeric_date_template;
对于非中文的其他语言,会调用Donottranslate-cldr.xml (mediatek\frameworks\base\res\res\values)中的对应字符串进行替换。
所以中文和其他语言是不一样的。
29.more ringtone(情景设置-更多铃声)
MTK6582-KK/packages/apps/Settings/ext/src/com/mediatek/setttings/ext/DefaultAudioProfileExt.java
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_MORE_RINGONES,true);
30.听筒,音频
Mediaek/packages/app/FactoryMode/src/com/mediatek/facorymode/earphone/Earphone.java
int i=this.mAudioManager.getStreamMaxVolume(0);
localAudioManager2.setStreamVolume(0,3,4);
31.页面滑动设置
alps/frameworks/opt/telephony/src/java/com/android/internal/telephony/MccTable.java
updateMccMncConfiguration方法,注释掉下面三行
if(locale != 0){
config.setLocale(locale);
updateConfig=true;
}
32.如何去掉开机向导
MTK_OOBE_APP=yes
33.如何查看当前工程哪些profile是打开的(profile:配置文件)
common/ProjectConfig.mk和product/ProjectConfig.mk,是用来控制profile 宏的打开和关闭的,在编译时,系统会先查看product/ProjectConfig.mk的宏状态,并设为该处定义的宏状态;若此文件没有该宏,则去查找common/ProjectConfig.mk。编译之后的结果将写在featureoption.java中。
举例说明mt6589 product下MTK_BT_PROFILE_PRXM:
若在alps\mediatek\config\mt6589下,MTK_BT_PROFILE_PRXM=yes,在common/ProjectConfig.mk下,MTK_BT_PROFILE_PRXM=no,则MTK_BT_PROFILE_PRXM是打开的,featureoption.java中会有:MTK_BT_PROFILE_PRXM=yes。
若在alps\mediatek\config\mt6589下,没有MTK_BT_PROFILE_PRXM,在common/ProjectConfig.mk下,MTK_BT_PROFILE_PRXM=no,则MTK_BT_PROFILE_PRXM是关闭的,featureoption.java中会有:MTK_BT_PROFILE_PRXM=no。
三只文件的路径分别为:
alps\mediatek\config\common\ProjectConfig.mk
alps\mediatek\config\mt6589\ProjectConfig.mk
alps\mediatek\source\frameworks\featureoption\java\com\mediatek\featureoption\featureoption.java
JB下:alps\mediatek\frameworks\common\src\com\mediatek\common\FeatureOption\featureoption.java
34.如何在Codebase中添加一级新的ProjectConfig.mk文件
[Description]
如何在Codebase中添加一个新的ProjectConfig.mk文件,使得其优先级大于
mediatek/config/$project/ProjectConfig.mk
[Keyword]
ProjectConfig.mk
优先级大于$project目录下的ProjectConfig.mk文件
[Solution]
Step1. 在mediatek/config下面添加自己的文件夹名称,如testconfig,在其中放入贵司自己的ProjectConfig.mk
Step2. 修改文件mediatek/build/libs/Custom.mk中的define .mtk.custom.generate-folder-list命令包,在该命令包最后一行的最前面添加Step1中添加的文件夹名称,添加后的最后一行为:testconfig $(_fp_list_) $(_cust_list_) $(call lc, $(MTK_PLATFORM)) common)
这样,添加的这个ProjectConfig.mk中的宏将会覆盖其他ProjectConfig.mk 中相同名字的宏
不过这个方法有两个限制:
1. 所添加的文件夹必须位于mediatek/config目录下
2. Step2中必须把添加的文件夹的名称放到命令包最后一行的最前面,如果你添加了两个文件夹,如testconfig1和testconfig2,则需要把两个文件夹都添加到命令包的最后一行,其中前面一个相对后面一个具有优先权
35.[FAQ03202] 如何在java代码里引用自定义projectConfig.mk宏开关
[DESCRIPTION]
要在java环境下使用ProjectConfig.mk定义的宏不是简单的添加到
AUTO_ADD_GLOBAL_DEFINE_BY_NAME
AUTO_ADD_GLOBAL_DEFINE_BY_VALUE
AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE宏中。
而是在java环境下定义一个类FeatureOption,然后java代码就可以通过访问这个类来确认哪些feature是否打开
[KEYWORD]
FeatureOption,java,ProjectConfig.mk
[SOLUTION]
那么如何在类FeatureOption中添加自己的feature option呢?
添加方法如下:
1.首先需要在$project目录下的ProjectConfig.mk定义一个宏,这个宏的值只能为:
Yes和no.
比如:
Xxx_support=yes
#this is xxx feature
2. 既然已经定义了宏,然后将该宏添加到mediatek\build\tools\javaoption.pm,这只文件放的所有宏都是会添加到FeatureOption这个类中
3.最后脚本会生成:
mediatek/source/frameworks/featureoption/java/com/mediatek/FeatureOption.java,这样就可以在java环境下使用FeatureOption类了
36.[FAQ03201] 如何在c/c++代码里引用自定义ProjectConfig.mk宏开关
[DESCRIPTION]
AUTO_ADD_GLOBAL_DEFINE_BY_NAME/AUTO_ADD_GLOBAL_DEFINE_BY_VALUE/AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE是编译系统开出的3个可以将ProjectConfig.mk中的宏(注意添加的宏必须大写)添加到C/C++源文件的接口。
[KEYWORD]
AUTO_ADD_GLOBAL_DEFINE_BY_NAME
AUTO_ADD_GLOBAL_DEFINE_BY_VALUE
AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE
ProjectConfig.mk
[SOLUTION]
详细如下:
AUTO_ADD_GLOBAL_DEFINE_BY_NAME:
如果你希望定义一个宏开关(作为一个功能模块的开关),然后在源文件(*.c/h等使用到这个宏开关),比如你定义了一个XXX_SUPPORT这个宏的值只有yes和no。那么你可以在
ProjectConfig.mk中定义:
XXX_SUPPORT = yes
但是这样定义在源文件是找不到XXX_SUPPORT的,因此需要加入AUTO_ADD_GLOBAL_DEFINE_BY_NAME,加入之后就可以在源文件使用了,比如aa.c中:
#ifdef XXX_SUPPORT
......
#endif
注意:如果添加的宏的值为no/none/false(无论大小写),那么该宏不会被添加进去。
AUTO_ADD_GLOBAL_DEFINE_BY_VALUE:
同上,但是差别在于你希望将宏的值传给源文件,比如定义了:
XXX_TP = CTP#RTP or CTP
你希望在代码中去判断当前使用了RTP还是CTP,那么可以将XXX_TP加入AUTO_ADD_GLOBAL_DEFINE_BY_VALUE
这样在源文件中就可以引用了,比如aa.c中:
#ifdef CTP
......
#elif RTP
......
#endif
AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE:
它与AUTO_ADD_GLOBAL_DEFINE_BY_NAME差别在于AUTO_ADD_GLOBAL_DEFINE_BY_NAME只有定义和没有定义之分,而AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE还可以知道它的值是多少(注意这个值是字符串),比如:
XXX_NUM = 1#1 or 2
那么加入AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE之后:
在源文件中就可以这样用(比如aa.c):
if (!strcmp(XXX_NUM, "1"))
{
}
else
{
}
37.[FAQ04293] 如何预置桌面上的应用程序图标、快捷方式图标或者窗口小部件?
Platform:MT6589MT6572MT6582MT6571...
Branch:JB2JB3JB5GB3...
FAQ Content
[DESCRIPTION]
如何预置桌面上的应用程序图标、快捷方式图标或者窗口小部件?
[SOLUTION]
请修改res/xml/default_workspace.xml文件,添加如下代码:
<favorite
launcher:packageName="" //完整的包名
launcher:className="" //完整包名.类名(处理main intent的类)
launcher:screen="" //应用图标所在的屏幕(从0开始)
launcher:x="" //应用图标所在的列
launcher:y="" /> //应用图标所在的行
<shortcut
launcher:uri="http://www.baidu.com"
launcher:icon="@drawable/ic_launcher_baidu"
launcher:title="@string/baidu_title"
launcher:screen=""
launcher:x=""
launcher:y="" />
<shortcut
launcher:uri="#Intent;action=android.intent.action.MAIN;launchFlags=0x10200000;component=com.cleanmaster.mguard/com.cleanmaster.processcleaner.ProcessCleanerActivity;end"
launcher:icon="@drawable/ic_launcher_application"
launcher:title="@string/jinshan_title"
launcher:screen=""
launcher:x=""
launcher:y=""/>
<appwidget
launcher:packageName="com.android.settings"
launcher:className="com.android.settings.widget.SettingsAppWidgetProvider"
launcher:screen="3"
launcher:x="0"
launcher:y="0"
launcher:spanX="4" //在屏幕上x方向所占的格子数
launcher:spanY="1" //在屏幕上y方向所占格子数 />
备注:
1、不能预置有configuration的AppWidget。
2、Google从KK开始对系统权限增加限制,对于system权限的获取有严格的规范。Launcher3默认拿不到系统BIND_APPWIDGET权限,因此无法预置AppWidget。
如果要预置AppWidget,需要Launcher3获取到系统权限,因此要修改Launcher3的Android.mk,增加LOCAL_PRIVILEGED_MODULE := true,这样build出来的Launcher3.apk会生成到/system/priv-app目录下,可以预置appwidget。
具体代码撰写如下:
3、如果是运营商项目,会有resource_overlay机制,以OP01/SPEC0200/SEGC为例,桌面预置内容是以如下路径的default_workspace.xml为准:
ICS/ICS2: alps/mediatek/source/operator/OP01/SPEC0200/SEGC/OverLayResource/packages/apps/Launcher2/res/xml/default_workspace.xml
JB/JB2: alps/mediatek/operator/OP01/SPEC0200/SEGC/OverLayResource/packages/apps/Launcher2/res/xml/default_workspace.xml
其他运营商项目与此类似。
38.如何预置APK
注意:APK的命名不能有空格
FAQ04300] 如何预置APK
Platform:MT6572MT6582MT6588MT6589...
Branch:GB3JB2JB3JB5...
FAQ Content
[DESCRIPTION]
1, 如何将带源码的 APK 预置进系统?
2, 如何将无源码的APK预置进系统?
3, 如何预置APK使得用户可以卸载,恢复出厂设置时不能恢复?
4, 如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复?
[SOLUTION]
一、如何将带源码的APK预置进系统?
1) 在 packages/apps 下面以需要预置的 APK的 名字创建一个新文件夹,以预置一个名为Test的APK 为例
2) 将 Test APK的Source code 拷贝到 Test 文件夹下,删除 /bin 和 /gen 目录
3) 在 Test 目录下创建一个名为 Android.mk的文件,内容如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := Test
include $(BUILD_PACKAGE)
4) 打开文件 build/target/product/${Project}.mk (其中 ${Project} 表示工程名)
将 Test 添加到 PRODUCT_PACKAGES 里面。
5) 重新 build 整个工程
二、如何将无源码的 APK 预置进系统?
1) 在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例
2) 将 Test.apk 放到 packages/apps/Test 下面
3) 在 packages/apps/Test 下面创建文件 Android.mk,文件内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := Test
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)
4) 打开文件 build/target/product/${Project}.mk (其中 ${Project} 表示工程名)
将 Test 添加到 PRODUCT_PACKAGES 里面。
5) 将从Test.apk解压出来的 so库拷贝到alps/vendor/mediatek/${Project}/artifacts/out/target/product/${Project}/system/lib/目录下,若无 so 库,则去掉此步;
6) 重新 build 整个工程
注:Google在KK上修改protection Level为System的permission控管机制
如果App使用System Level的permission,需要預置到/system/priv-app底下 (原在/system/app)。
举例来讲:
关于获取副SD卡的写入权限的案例,App需要在AndroidManifest.xml宣告WRITE_MEDIA_STORAGE permission获取副卡的写入权限
(Ref: KK/alps/frameworks/base/core/res/AndroidManifest.xml)
已知android.permission.WRITE_MEDIA_STORAGE属于SystemOrSignature level的permission,定义如下:
KK上,您需要采用以下方法,获取该permission:
修改Android.mk,增加LOCAL_PRIVILEGED_MODULE := true,以声明app需要放在/system/priv-app下。
三、如何预置APK使得用户可以卸载,恢复出厂设置时不能恢复?
1) 在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例
2) 将 Test.apk 放到 packages/apps/Test 下面;
3) 在 packages/apps/Test 下面创建文件 Android.mk,文件内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := Test
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
include $(BUILD_PREBUILT)
4) 打开文件 build/target/product/${Project}.mk (其中 ${Project} 表示工程名)
将 Test 添加到 PRODUCT_PACKAGES 里面。
5) 重新 build 整个工程
注意:这个比不能卸载的多了一句
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
四、如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复?
有两种方法:
方法一:预置apk到system/vendor/operator下面
具体做法如下:
在packages/apps下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例:
1) 将Test.apk 放到 packages/apps/Test 下面;
2) 在packages/apps/Test下面创建文件 Android.mk,文件内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := Test
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app
include $(BUILD_PREBUILT)
3) 打开文件 build/target/product/${Project}.mk (其中 ${Project} 表示工程名), 将 Test 添加到 PRODUCT_PACKAGES 里面
4) 重新 build 整个工程
方法二:使用MTK_SPECIAL_FACTORY_RESET,再配合.keep_list / .restore_list
为了让用户在将预置的 APK 卸载后,恢复出厂设置时能恢复,敝司做了一个 Feature,但在ALPS.GB.TDFD.MP.V1.7和 ALPS.GB.FDD2.MP.V4.7版本后支持,若贵司版本低于此版本,请申请 Patch ALPS00092543;
大致的做法是:
- 在vendor/mediatek/project_name/artifacts/out/target/product/project_name/system目录下新建一个名为appbackup的文件夹,将该应用的apk文件copy到appbackup文件夹下
- 在mediatek/config/project_name/ProjectConfig.mk文件中添加定义:MTK_SPECIAL_FACTORY_RESET=yes
- 在vendor/mediatek/project_name/artifacts/out/target/product/project_name/data/app下创建一个.restore_list,并且在其中添加语句:
/system/appbackup/xxx.apk(注意,.restore_list中的每一行都要以"/system” 开头)
当卸载了data/app下的apk后,再恢复出厂设置,系统会从 .restore_list 中读取apk的名字,然后从 appbackup 文件中把apk重新拷贝到data/app下,从而恢复data/app下已经卸载了的apk。
同时,还需要在vendor/mediatek/project_name/artifacts/out/target/product/project_name/data/app目录下创建一个空文件,命名为.keep_list(.keep_list的用途是,如果安装了A,B,C三个APK到DATA,在恢复出厂设置时,想要将A保留,那么就将A写入到.KEEP_LIST,这样,A会被保留,B,C会被删除。如果没有这个文件,那么所有的APK都会被保留。具体可以参考FAQ03437和FAQ05341)。
以上操作过程,DCC 上面也有相应的文档可供参考,文档的名字叫: Android SD upgrade application note.docx,里面有一项:MTK special factory reset,就详细地介绍了以上操作步骤。
注:该方法从kk开始不建议使用,原因:从KK版本开始,DVM取dex文件的路径变成了绝对路径,而PMS和installd用的都是文件路径,如果用MTK_SPECICAL_FACTORY_RESET配合.restore_list的方式恢复apk的话,这种上下不sync会导致一些问题,比如:恢复出厂设置后三方应用报错、恢复出厂设置后user版本move to phonestorage报错、多次恢复出厂设置开机提示"Android系统正在升级"等。
39.如何添加互动屏保(DayDream)
alps/build/target/product/下,添加PRODUCT_PACKAGES =PhotoTablea
alps/build/target/product/common.mk下,添加
#zfc add photo 20140812
ifeq ($(strip $(PROJECT_M801_TORQUE_SUPPORT)), yes)
PRODUCT_PACKAGES += PhotoTable
PRODUCT_PACKAGES += WebView
Endif
40.[FAQ09792] 如何将源代码编译后的文件(lib库/bin/jar/apk等)编译到android中
[FAQ09792] 如何将源代码编译后的文件(lib库/bin/jar/apk等)编译到android中
Platform:MT6572MT6582MT6588MT6589...
Branch:GB3JB2JB3JB5...
FAQ Content
[DESCRIPTION]
某些自己写的代码不希望跟随codebase释放出去,也可以将编译之后的文件放在codebase中,编译时一起编译进去的。
[KEYWORD]
lib
bin
apk
编译
[SOLUTION]
(1):加入你的代码放在alps/test目录下,里面有test.c和Android.mk,编译为test的可执行文件。
1. 请先编译一遍,生成test文件,将out/target/product/$proj/system/bin/test文件放到alps/test/目录下,此时可以拿掉test.c和Android.mk
2. 重新创建一个Android.mk,编写如下:
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PREBUILT_EXECUTABLES += test
include $(BUILD_MULTI_PREBUILT)
3. 然后将'test'添加到alps/build/target/product/common.mk里的PRODUCT_PACKAGES(这一步的目的是保证编译到android):
PRODUCT_PACKAGES := \
...... \
test
============================
(2):以上是将可执行文件编译到android,如果要将*.so,*.a, *.jar放进去,可以将
LOCAL_PREBUILT_EXECUTABLES += test
替换为:
*.so或*.a是:
LOCAL_PREBUILT_LIBS += 1.so 2.so 3.a #还可以一次性加多个同类型的文件,这样的话,第3步就得将‘1’,‘2’,‘3’全部加入PRODUCT_PACKAGES
*.jar是:
LOCAL_PREBUILT_JAVA_LIBRARIES += 1.jar 2.jar
如果是静态的*.jar,则是:
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += 1.jar 2.jar
---------------------------
稍微复杂的写法是:可以将以上放在一起,例子如下:
Android.mk:
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PREBUILT_EXECUTABLES += a b c
LOCAL_PREBUILT_LIBS += d.so e.a
LOCAL_PREBUILT_JAVA_LIBRARIES += f.jar
LOCAL_STRIP_MODULE := true #这个表示是否要移除调试信息,只对可执行文件、lib库有效
include $(BUILD_MULTI_PREBUILT)
然后将'a', 'b', 'c', 'd', 'e', 'f'加入到PRODUCT_PACKAGES中。
============================
(3)添加apk就不能这样做了,必须使用BUILD_PREBUILT, 可支持签名:LOCAL_CERTIFICATE,如果为PRESIGNED则不签,支持zipalign。
比如要添加a.apk,Android.mk:
#include $(CLEAR_VARS)
LOCAL_MODULE := a
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := APPS
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED #不做签名
LOCAL_MODULE_PATH := $(TARGET_OUT)/app #放到system/app目录下
include $(BUILD_PREBUILT)
然后将a加入PRODUCT_PACKAGES
============================
(4)其他文件可以用BUILD_PREBUILT或PRODUCT_COPY_FILES,区别在于PRODUCT_COPY_FILES不能用mm命令编译,只能用remake android编译,但是PRODUCT_COPY_FILES写法很简单:
PRODUCT_COPY_FILES += $(LOCAL_PATH)/test:test
表示将test复制到$(PRODUCT_OUT)下,并且命名为test。这里的test可以替换为任意文件
用BUILD_PREBUILT的Android.mk如下:
#include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := ETC
LOCAL_SRC_FILES := $(LOCAL_MODULE)
LOCAL_MODULE_PATH := $(TARGET_OUT) #存放的位置$(TARGET_OUT)表示是system/,还可以使用$(TARGET_OUT_*)的宏,具体定义在alps/build/core/envsetup.mk
include $(BUILD_PREBUILT)
41.工厂模式-单项测试-辅摄像机去掉
Mediatek/custom/m802_qmobile/factory/factory.ini
(MenuItem=Sub Camera)
41.打开相机应用-设置-相机设置-Picture size/Preview size(4:3)
1.mediatek/custom/m803/hal/imgsensor/s5k3h7y_mipi_raw/config.ftbl.s5k3h7y_mipi_raw.h
//picture size (both width & height must be 16-aligned)
FEABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
ITEM_AS_DEFAULT(“4160*3120”),
ITEM_AS_VALUES_(
“320*240”,”640*480”,”1024*768”
)
)
2.packages/apps/Camera/res/values/camera_arrays.xml
<string-array>
<item>@string/pref_camera_picturesize_entry_4608x3456</item>
<string-array>
3.packages/apps/Camera/src/com/android/camera/CameraSettings.java
Public static final String[] picture_size_16_9=new String[]{
“1280*720”
}
4.packages/apps/Camera/res/values-en-rUS/mtk_strings.xml
<string name="pref_camera_picturesize_entry_3264x2448">8M pixels</string>
5.packages/apps/Camera/res/values/mtk_camera_strings.xml
<string name="pref_camera_picturesize_entry_3264x2448">8M pixels</string>
42..3G信号问题
Frameworks/base/telephony/java/android/telephony/SignalStrength.java
43.TP点击多次死机问题
Frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
44.如何切换单双卡
找到对应工程的ProjectConfig.mk文件,修改以下内容:
[Dual SIM]:
GEMINI = yes
MTK_GEMINI_ENHANCEMENT = yes
MTK_GEMINI_3G_SWITCH = yes
MTK_SHARE_MODEM_SUPPORT = 2
MTK_SHARE_MODEM_CURRENT = 2
[Single SIM]:
GEMINI = no
MTK_GEMINI_ENHANCEMENT = no
MTK_GEMINI_3G_SWITCH = no
MTK_SHARE_MODEM_SUPPORT = 2
MTK_SHARE_MODEM_CURRENT = 1
45.修改USB名称
Kernel/drivers/usb/gadget/android.c
#ifdef product_m802_qmobile_support
#define product_string “Q-Smart QS470”
46.新增PhotoTable && WebView
Ifeq($(strip$(project_m801_torque_support)),yes)
Product_packages+=PhotoTable
Product_packages+=WebView
Endif
Build/target/product/full_base.mk
PRODUCT_PACKAGES+=\
WebView\
PhotoTable
47.Java类做差分包
String value=android.os.SystemProperties.get(“ro.m802.shuttersound”,”no”);
If(value.equals(“yes”)){
代码块
}
48.设置双卡铃声,Use to set multi sim card ringtone/video call/sip call.
MTK_MULTISIM_RINGTONE_SUPPORT=yes
49.WIFI直连
Frameworks/base/wifi/java/android/net/wifi/p2p/WifiP2PService.java
String value=android.os.SystemProperties.get(“ro.custom.m803”,”no”);
If(value.equals(“yes”)){
Return “Q-Smart QS470”;//wifi直连的名称
}
50.修改系统默认时间为2014-01-01日
路径如下:
frameworks/base/services/java/com/android/server/NetworkTimeUpdateService.java
String decryptState = SystemProperties.get("vold.decrypt", "");
Log.d(TAG, "decryptState:" + decryptState);
if("".equals(decryptState) || DECRYPT_STATE.equals(decryptState)){
Time today = new Time(Time.getCurrentTimezone());
today.setToNow();
Log.d(TAG, "First boot:" + tempString + " with date:" + today);
//delete by hcj for 2014/1/1
today.set(1, 1, mDefaultYear);
51.虚拟按键震动时间控制
对frameworks/base/core/res/res/values/config.xml 文件做如下修改
<integer-array name="config_virtualKeyVibePattern">
<item>0</item>
<item>10</item> 开
<item>10</item> 关
<item>10</item> 开
</integer-array>
以上数字的时间单位为ms
<!-- Vibrator pattern for feedback about touching a virtual key -->
<integer-array name="config_virtualKeyVibePattern">
<item>0</item>
<item>20</item>
<item>20</item>
<item>40</item>
</integer-array>
52.Settings-Storage内存存储设置M715_emmc
Packages/apps/Seetings/src/com/mediatek/settings/deviceinfo/MemoryExts.java
在initMtkCategory()方法调用internalInformationShowMemory();
53.关机状态下,信号灯提示
Alps/frameworks/base/services/java/com/android/server/BatteryService.java
54.Settings/About phone/status/Serial number/SN号
Alsp/packages/apps/Settings/src/com/mediatek/settings/deviceinfo/StatusGenini.java
添加默认SN号:
Alsp/bootable/bootloader/lk/app/mt_boot/mt_boot.c
#define DEFAULT_SERIAL_NUM "00000000000000"
55.相机-曝光度修改为+1
Alsp/packages/apps/Camera/res/values-en-rUS/strings.xml
Alsp/packages/apps/Camera/res/values-my-rMM/strings.xml
Alsp/packages/apps/Camera/res/values-km-rKH/strings.xml
Alsp/packages/apps/Camera/res/values-ur/strings.xml
Alsp/packages/apps/Camera/res/values/camera_strings.xml
Alsp/packages/apps/Camera/res/xml/camera_preferences.xml
根据<string name=”pref_exposure_default” translatable=”false”>1</string>
56.更换 flash 型号
修改:alps/mediatek/custom/m803_torque/preloader/inc/custom_MemoryDevice.h
/*MTK 6573每个片选的范围是 2Gb,默认用CS0来片选 , 如果外挂的RAM是4Gb的话 ,还需要用到CS1来片选后面的2Gb 。*/
/*每个手机配置的flash 需要跑 ECC 才能得到一个合适的时序配置,这个时序需要MTK协助调试 */
#define BOARD_ID MT6573_EVB
/*2Gb ram cs config*/
#define CS0_PART_NUMBER[0] K524G2GACB_A050
/*4Gb ram cs config*/
//#define CS0_PART_NUMBER[0] MT29C4G96MAZAPCJA_5IT
//#define CS1_PART_NUMBER[0] MT29C4G96MAZAPCJA_5IT
/*同一size的多falsh兼容可以按如下方式配置 :flash 4Gb ram cs config*/
//add first flash config
//#define CS0_PART_NUMBER[0] MT29C4G96MAZAPCJA_5IT
//#define CS1_PART_NUMBER[0] MT29C4G96MAZAPCJA_5IT
//add second flash config
//#define CS0_PART_NUMBER[1] EHD013151MA_50
//#define CS1_PART_NUMBER[1] EHD013151MA_50
57.进入工厂模式*#*#888#*#*,点击夹具测试进行测试,在测试到收音机一项时,待屏幕自动熄灭后在点亮,结果在相机界面,点击拍照后提示“很抱歉,工厂模式已停止运行”
更新以下文件:
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
mediatek/packages/apps/FactoryMode/src/com/mediatek/factorymode/camera/CameraTest.java
mediatek/packages/apps/FactoryMode/src/com/mediatek/factorymode/camera/SubCamera.java
夹具测试
Alsp/mediatek/packages/apps/FactoryMode/res/values/string.xml
<string name=”usb_memory”>USB存储器</string>
<string name=”usb_memory”>SD卡</string>
Alsp/mediatek/packages/apps/FactoryMode/res/values-zh-rCN/string.xml
<string name=”usb_memory”>USB存储器</string>
<string name=”usb_memory”>SD卡</string>
58.重名名5次音乐播放器,弹出很抱歉,“音乐”已停止运行。重命名累计达到5次都有报错,如重命名两次后重新开关机在重命名三次,也会报错。
VPN中快速双击右上角的“+”弹出两个配置文件取消一个,输入内容后保存,提示很抱歉“设置”已停止运行。
新建一带有头像的联系人,其他字段加网站,输入“Tel:1234567890123“,联系人列表中点击头像,弹出很抱歉”联系人“已停止运行
frameworks/base/core/java/android/net/WebAddress.java
packages/apps/Music/src/com/android/music/RenamePlaylist.java
packages/apps/Settings/src/com/android/settings/vpn2/VpnSettings.java
59.外单关掉来电归属地
MTK_PHONE_NUMBER_GEODESCRIPTION
60.82-kk, 72-kk:关于拨号盘重复按”0“ ”+"切换出现报错,请大家更新:packages/apps/Dialer/src/com/android/dialer/DialtactsActivity.java
61.M803音频(优化耳机通话破音)
Sph_coeff_default.h不用更新
Alps/mediatek/custom/m803_torque/cgen/inc
62.Question问题:内存空间不足
make[2]: *** [out/target/product/m715_torque/obj/PACKAGING/systemimage_intermediates/system.img] 错误 255
system/media/audio/notifications/Spica.Error: leb_cnt too low(1100(275MB) needed)
解决:
Alps/packages/apps/HardwareTest/res/raw/下,修改里面文件大小
63.Launcher3无响应,要将其关闭吗?
解决:运存不够,试下swah分区
后台服务取消几个,内存减少就好了
系统问题,手机的cpu不行,处理速度不行,会出现这种情况,你去刷个固件吧
64在使用手机应用程序的过程中,有些用户经常遇到“很抱歉,‘xxxx’已停止运行。”的情况,重启手机或者卸载应用程序重新安装后都不好使。这种情况怎么解决呢?
解决方法:通过手机应用管理将此应用的数据清空。
65.work/mtk72-kk/kernel/mediatek/custom/out/kernel/imgsensor/kd_sensorlist.h:320:6: error: 'SP0A19_SENSOR_ID' undeclared here (not in a function)
Alps/mediatek/custom/common/kernel/imgsensor/sp0a19_yuv/sp0a19yue_Sensor.c
Alps/mediatek/custom/common/hal/imgsenfor/src/sensorlist.cpp
Kd_sensorlist.h里对应的'SP0A19_SENSOR_ID' 和下面'SP0A19_SENSOR_ID' 不同
#if defined(SP0A19_YUV)
{SP0A19_YUV_SENSOR_ID,SENSOR_DRVNAME_SP0A19_YUV,SP0A19_YUV_SensorInit},
#endif
66.修改开关机动画Animation
A:注意压缩时候的选项,即压缩
B:Alps/out/target/product/m715/system/media
C:编译命令:make [project] snod
67.来电归属地
MTK_PHONE_NUMBER_GEODESCRIPTION=NO
68.系统默认语言
MTK_PRODUCT_LOCALES=en_US
69.预置APK参数
Mediatek/framework/base/telephony/etc/apns-conf.xml
70.默认时区(Miami GMT-5:00)
Build/target/product/m707_ddr2.mk
PRODUCT_PROPERTY_OVERRIDES += persist.sys.timezone=America/New_York
71.添加手电筒
Packages/apps/FlishLight(手电筒应用)
Build/target/product/m707_ddr2.mk
PRODUCT_PACKAGES := \
FlishLight\
72.存储需要做成合并分区默认MTP模式,但不能删除USB模式;并且容量需要完全显示出来。
Mediatek/config/m707_ddr2/ProjectConfig.mk
MTK_MASS_STORAGE=no
Build/core/main.mk
Build/target/product/m707_ddr2.mk
#default usb function
Ifeq($(strip $(MTK_MASS_STORAGE)),yes)
ADDITIONAL_DEFAULT_PROPERTIES += persist.sys.usb.config=mass_storage
Else
ADDITIONAL_DEFAULT_PROPERTIES += persist.sys.usb.config=mtp
Endif
//单一分区存储或共享SDCard
MTK_SHARED_SDCARD=YES
73.系统日期(日期格式:日/月/年 28/05/2015)
A:在external/icu4c下新建临时目录icubuild,进入icubuild目录
$ mkdir external/icu4c/icuBuild
$ cd external/icu4c/icuBuild
B:执行icuConfigureRun Linux命令,生成make文件
$.././icuConfigureRun Linux
C:执行make -j2命令
$make -j2
D:将生成的文件external/icu4c/icuBuild/data/out/tmp/icudtxxl.dat
复制到:external/icu4c/studata/
并改名:icudtxxl-all.dat,覆盖原来的同名文件
Alps/frameworks/base/core/res/res/values/donottranslate-cldr.xml
<string name="month_day_year">%-e %B, %Y</string> //日-月-年
74.Ubuntu中安装Windows程序Source Insight
A:安装Wine
Sudo apt-get install wine
B:用Wine安装Source Insight,在终端输入命令:
wine ./SourceInsight-3576-Setup/SourceInsight-3576-Setup.exe
75.Ubuntu下卸载软件方法
A:当我们知道软件的名称,直接在终端窗口输入命令:
Sudo apt-get remove --purge google-chrome-unstable
--purge 表示彻底删除改软件和相关文件
B:系统-系统管理-新立得软件包管理器
76.设置-存储-OS Storage/Phone storage
packages/apps/Settings/src/com/mediatek/settings/deviceinfo/MemoryExts.java
//"ro.ddr2.m707" #zfc only for cross project
private void internalInformationShowMemory_2()
{
Preference mInternalROMInfoPref_Total;
Preference mInternalROMInfoPref_System;
Preference mInternalROMInfoPref_Available;
mInternalROMInfoPref_Total = new Preference(mActivity);
mInternalROMInfoPref_Total.setTitle("OS storage");
mInternalROMInfoPref_Total.setSummary("329 MB"); ///512+256
mRootContainer.addPreference(mInternalROMInfoPref_Total);
mInternalROMInfoPref_Available = new Preference(mActivity);
mInternalROMInfoPref_Available.setTitle("Phone storage");
mInternalROMInfoPref_Available.setSummary((CharSequence)("183MB"));///5 12+256
mRootContainer.addPreference(mInternalROMInfoPref_Available);
}
77.设置-存储-Internal Storage改为Phone Storage
packages/apps/Settings/src/com/mediatek/settings/deviceinfo/StorageVolumePreferenceCategoryExts.java
public void setVolumeTitle(Preference preference) {
String title = null;
if (mVolume == null) {
int resId=0;//zfc add code
String ddr2Values = SystemProperties.get("ro.ddr2.m707", "no"); //zfc add
if(ddr2Values.equals("yes")){
resId = com.android.internal.R.string.storage_phone ; //zfc add code
}else{
resId=(FeatureOption.MTK_SHARED_SDCARD&& !FeatureOption.MTK_2SDCARD_SWAP)?com.android.internal.R.string.storage_phone : R.string.internal_storage;
}
78.UI动态网格布局修改(DynamicGrid)
Alsp/packages/apps/Launcher3/src/com/android/launcher3/DynamicGrid.java
void updateFromConfiguration(Resources resources, int wPx, int hPx,int awPx, int ahPx) {
isLandscape = (resources.getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE);
isTablet = resources.getBoolean(R.bool.is_tablet);
isLargeTablet = resources.getBoolean(R.bool.is_large_tablet);
widthPx = wPx;
heightPx = hPx;
availableWidthPx = awPx;
availableHeightPx = ahPx;
Rect padding = getWorkspacePadding(isLandscape ?
CellLayout.LANDSCAPE : CellLayout.PORTRAIT);
int pageIndicatorOffset =
resources.getDimensionPixelSize(R.dimen.apps_customize_page_indicator_offset);
if (isLandscape) {
allAppsNumRows=(availableHeightPx-pageIndicatorOffset - 4 * edgeMarginPx) /(iconSizePx + iconTextSizePx + 2 * edgeMarginPx);
} else {
StringvalueDDR2=android.os.SystemProperties.get("ro.ddr2.m707","no"); //add by hcj
if (valueDDR2.equals("yes")) {
allAppsNumRows = 4;
} else {
allAppsNumRows = (int) numRows + 1;
}
}
79.存储:存储需要做成合并分区默认MTP模式但不能删除USB模式
如何修改USB连接后的默认功能
默认功能为MTP为例,在main.mk中,使用
ADDITIONAL_DEFAULT_PROPERIEIES+=persist.sys.usb.config=mtp
80.如何实现single partition(分区) storage or shared cdcard功能
此功能打开后会将sdcard与data分区合并,只能使用MTP来访问sdcard
Alps/mediatek/config/m707_ddr2/ProjectConfig.mk
# sdcard will be a folder of /data
MTK_SHARED_SDCARD=no
81.Java文件做差分
import android.os.SystemProperties;
String ddr2Values = SystemProperties.get("ro.ddr2.m707", "no");
if(ddr2Values.equals("yes")){
resId = com.android.internal.R.string.storage_phone ;
}
82.安装APK路径选择(Cancel,Install to internal,Install to SD)
ALSP/packages/apps/packageinstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
private void startInstallConfirm();
String valgggg1 = android.os.SystemProperties.get("ro.m707ddr2plum","no");
mInstallConfirm.setVisibility(View.VISIBLE);
mOk = (Button)findViewById(R.id.ok_button);
if(valgggg1.equals("yes"))//add lch
{
mOk.setVisibility(View.GONE);
}
mCancel = (Button)findViewById(R.id.cancel_button);
if(valgggg1.equals("yes"))//add lch
{
mSys = (Button)findViewById(R.id.sys_button); //add lch sys_button
mSys.setOnClickListener(this);//add lch
mSys.setVisibility(View.VISIBLE);
mSD = (Button)findViewById(R.id.sd_button); //add lch sd_button
mSD.setVisibility(View.VISIBLE);
mSD.setOnClickListener(this);//add lch
}
Alsp/packages/apps/PackageInstaller/res/values/strings.xml
<string name="sys_install">Install to internal</string><!-- add lch -->
83.浏览器,修改网址为:http://www.google.com
packages/apps/Browser/res/values/mtk_strings.xml
<string name="homepage_base_site_navigation" translatable="false">
https://www.google.com</string>
<!--liup add for cross prj start-->
<string name="homepage_base_site_navigation_cross" translatable="false">
https://www.google.com</string>
packages/apps/Browser/res/values/strings.xml
84.设置-情景模式-手机铃声/默认通知提示音
Alsp/frameworks/base/data/sounds/AllAudio.mk
Alsp/frameworks/base/data/sounds/AudioPackage4.mk
Alsp/frameworks/base/data/sounds/AudioPackage5.mk
85.设置-蓝牙/Bluetooth修改为BT
Alsp/frameworks/base/packages/SystemUI/res/values/mtk_strings.xml
Alsp/frameworks/base/packages/SystemUI/res/values/strings.xml
<string name=”bluetooth”>BT</string>
86.UI界面快捷小部件
Alsp/packages/apps/Launcher3/res/xml/default_workspace.xml
87.工厂模式下修改菜单选项
Alps/mediatek/custom/m707_ddr2/factory/factory.chn.ini
MenuItem=光传感器距离传感器;
MenuItem=闪光灯;
MenuItem=GPS定位;
88.工厂模式测试项目不能显示
[DESCRIPTION]
Factory mode test item cannot display
[SOLUTION]
如果factory mode的测项不能正常显示,请首先参考检查以下原因:
原因一:factory.c的ftm_test_item[]中未定义该测项
请务必确定alps/mediatek/factory/src/factory.c中ftm_test_item[]数组中定义了该测项。
static item_t ftm_test[] = {
#ifdef FEATURE_FTM_KEYS
item(ITEM_KEYS, uistr_keys),
#endif
#ifdef FEATURE_FTM_JOGBALL
item(ITEM_JOGBALL, uistr_jogball),
#endif
#ifdef FEATURE_FTM_OFN;
item(ITEM_OFN, uistr_ofn),
#endif
#ifdef FEATURE_FTM_TOUCH
item(ITEM_TOUCH, uistr_touch),
#endif
原因二:未进行宏定义
确认定义该测项时,其对应的宏是否有定义
在alps/mediatek/factory/src/factory.c的ftm_test_items[]中,查看包裹该测项的宏。
#ifdef MTK_WLAN_SUPPORT
#ifdef FEATURE_FTM_WIFI
item(ITEM_WIFI, "Wi-Fi"),
#endif
#endif
在alps/mediatek/custom/[project]/factoryinc/cust.h中查看FEATURE_FTM_WIFI的定义
#if defined (MTK_WLAN_SUPPORT)
#define FEATURE_FTM_WIFI
#endif
关于MTK_WLAN_SUPPORT的定义需要在alps/mediatek/config/[project]/ProjectConfig.mk中查看
注意:请查看ProjectConfig.mk文件中是否有AUTO_ADD_GLOBAL_DEFINE_BY_NAME和AUTO_ADD_GLOBAL_DEFINE_BY_VALUE的定义,请确定该测项需要的宏定义,已经按NAME或者VALUE添加在以上两个定义之一中。
还需要注意宏定义一定要确保能被编译到
#define FEATURE_DUMMY_AUDIO
#ifndef FEATURE_DUMMY_AUDIO
#define FEATURE_FTM_AUDIO
#define FEATURE_FTM_FM
#define FEATURE_FTM_FMTX
#ifdef HAVE_MATV_FEATURE
#define FEATURE_FTM_MATV
#endif
#endif
如上所示,即使定义了#define FEATURE_FTM_FM,但是从前面#ifndef语句来看,该定义永远不会被编译到。
原因三:factory.ini里面没有改测项
有时修改了factory.ini后,build factory模块,然后将factory模块push到手机里面。
这个时候请注意,如果测项无法正常显示,请务必检查手机端的factory.ini是否已经包含该测项。
检查方法如下:
手机进入normal mode或者factory mode,并连接到电脑上
打开命令行,输入adb shell命令
进入手机目录后,输入cd etc命令,进入etc目录下
输入cat factory.ini命令,查看手机中factory.ini是否包含该测项
原因四:字符串定义不一致
为了能够正常显示测项,需要确保测项字符串在ftm_test_item[]与factory.ini一致。
factory.c
static item_t ftm_test_items[] = {
#ifdef FEATURE_FTM_KEYS
item(ITEM_KEYS, uistr_keys),
#endif
#ifdef FEATURE_FTM_JOGBALL
item(ITEM_JOGBALL, uistr_jogball),
#endif
alps/mediatek/factory/inc/uistrings_chn.h
#define uistr_keys "按键"
#define uistr_jogball "轨迹球"
factory.chn.ini
MenuItem=按键;
MenuItem=轨迹球;
原因五:factory.ini中语言与factory mode一致
factory mode是中文版本,则确保factory.ini中的字符串也是中文版本;反之亦然
如果想象是只显示Wi-Fi,BT等中英版本中均使用英文的测项,一定首先检查factory mode与factory.ini的语言版本是否相同。
注意,此处查看的factory.ini是指手机端etc目录下面
89.如何编译ICU资源
如果只是测试修改后效果,执行步骤A即可;如果需要build后生效,则需要执行全部步骤
下面是KK的icu资源的路径为例子,如果是Android L请改为external/icu/icu4c/source/
A. 在临时目录中编译ICU资源
1. 在external/icu4c下新建临时目录icubuild,进入icubuild目录
$mkdir external/icu4c/icuBuild
$cd external/icu4c/icuBuild
2. 执行icuConfigureRun Linux命令,生成make文件
$.././runConfigureICU Linux
3. 执行make -j2命令,
$make -j2
4. 将生成的external/icu4c/icuBuild/data/out/tmp/icudtxxl.dat push到手机测试
$adb remount
$adb push external/icu4c/icuBuild/data/out/tmp/ icuxxl.dat system/usr/icu/
$adb reboot
KK:icudt51l.dat
Android L:icudt53l.dat
B. COPY所需文件
将第一步生成的external\icu4c\icubuild\data\out\tmp\icudtxxl.dat复制到external\icu4c\stubdata下并改名为icudtxxl-all.dat,覆盖原来的同名文件。
KK版本是icudt5l.dat和icudt5l-all.dat
注意:Android L是没有icudt53l-all.dat文件的,直接把icudt53l.dat拷贝过来替换原来的文件即可。
C. 重新编译工程
90.如何将工厂模式的内容显示,从中文改为英文
[Key Words]
SW相关,Factory Mode
[DESCRIPTION]
开机按开机键+下音量键,进入工厂模式。目前内容显示为中文,如何修改为英文显示。
[SOLUTION]
(1)关掉GB2312 option。
ICS版本:
\mediatek\source\factory\src\miniui\font.mk中SUPPORT_GB2312 := yes改为no
GB3,JB,JB2版本:
\mediatek\factory\src\miniui\font.mk中SUPPORT_GB2312 := yes改为no
JB3及JB3之后版本:
\mediatek\config\[project name]\ProjectConfig.mk
和\mediatek\config\common\ProjectConfig.mk中MTK_FACTORY_MODE_IN_GB2312=yes改为no
(2)参考uistrings_eng.h将factory.ini中各MenuItem翻译为英文。
例如:
MenuItem=Keys;
MenuItem=Jogball;
MenuItem=OpticalFingerNavi;
MenuItem=Touch Panel;
(3)重新build,再验证,可以使用ADB command(cat /etc/factory.ini)来验证手机中的factory.ini是否有更新成功。
91.如何修改出厂默认日期和默认时区
FAQ Content [DESCRIPTION] 手机第一次开机默认是没有定制时区的(默认是GMT:+00:00),但是会有一个默认日期,如2013年1月1日。 如何客制化默认时区以及时间呢? [Solution] 一、修改默认时间 1、修改RTC默认日期: Android L之前: \alps\mediatek\custom\[project]\preloader\ inc\cust_rtc.h \alps\mediatek\custom\[project]\kernel\rtc\rtc\rtc-mt65XX.h Android L: bootable\bootloader\preloader\custom\[project]\inc\cust_rtc.h #define RTC_DEFAULT_YEA 2012 #define RTC_DEFAULT_MTH 2 #define RTC_DEFAULT_DOM 1 2、修改默认日期: framework\services\java\com\android\server\NetworkTimeUpdateService.java …… if(isFirstBoot){ today.set(1, 0, mDefaultYear ); //设立出厂默认日期,mDefaultYear是默认年份 如果想恢复出厂设置后,系统时间不变,可使用today.setToNow(); 如果想恢复出厂设置后,系统时间也恢复成出厂时间,可使用today.set(1, 0, mDefaultYear ); 这个today.set方法有6个参数的重载,可以精确到秒,具体使用方法请自行查询API,所以在这里设置系统默认时间就可以了。
如果要設置出廠默認年份需要修改 1) mediatek\frameworks\base\res\res\values\config.xml将default_restore_year 修改成 2013 (Android L:vendor\mediatek\proprietary\frameworks\base\res\res\values) <!-- default year for first power on--> <integer name="default_restore_year">2013</integer> 2) frameworks\base\services\java\com\android\server\NetworkTimeUpdateService.java if(today.year <= 2010){ //删除此行判断条件 today.set(today.monthDay, today.month, 2013); Log.d(TAG, "Set the year to 2013"); SystemProperties.set(BOOT_SYS_PROPERTY, "false"); SystemClock.setCurrentTimeMillis(today.toMillis(false)); } 修改后的表现可通过Setting菜单->时间日期设置):
3、修改默认时区: 在系统属性中增加下面字段(假设改为Moscow) Android L之前: mediatek\config\[project]\system.prop Android L: device\mediatek\[project]\system.prop persist.sys.timezone = Europe/Moscow注意:默认时区的修改会影响默认时间的值,会根据与格林尼治标准时间差来更新时间,这是正常现象。如当前设置为中国标准时间GMT+8:00,则手机的出厂时间会变为8:00。 |
92.上海广升Fota
./build/tools/releasetools/ota_from_target_files -k build/target/product/security/testkey -i ota_target_files.zip ota_target_files.zip update.zip
93.C语言的预处理器
所有的C编译器软件包都提供了预处理器。编译C程序时,程序首先由编译器中的预处理器进行处理。在大多数C编译器中,预处理器都被集成到编译器程序中。当你进行编译器时,它将自动运行预处理器。
预处理器根据源代码中的指令(预处理器编译指令)对源代码进行修改。预处理器输出修改后的源代码文件,然后,该输出被用作下,一个编译步骤的输入。通常,你看不到这样的文件,因为编译器使用完毕后,将把它删除。后面将介绍如何查看这种中间文件。这里首先介绍预处理器编译指令,它们都以符号#大头。
A:#define预处理器编译指令
#define预处理器编译指令有两种用途:创建符号常量和创建宏。
1.使用#define创建简单的替换宏
第3天的课程已经介绍过替换宏,虽然那时使用的术语是符号常量。要创建替换宏,可以使用#define将一种文本替换为另一种文本。例如:要将text1替换为text2,可以这样编写代码:
#define text1 text2
上述编译指令导致预编译器将源代码文件中的所有text1替换为text2,但如果text1位于双引号中,则不替换。
替换宏最常见的用途是用于创建符号常量,这已经在第3天的课程中介绍过了。例如:如果程序中包含下述代码行:
#define MAX 1000
X = y * MAX;
Z = MAX - 12;
则在预处理过程中,上述源代码被修改为:
X = y * 1000;
Z = 1000 - 12;
这相当于使用编译器的”查找并替换”功能,将所有的MAX替换为1000.当然,原来的源代码文件保持不变,而是创建一个副本,并进行修改。#define并不局限于创建数值符号常量。例如:你可以编写这样的代码:
#define ZINGBOFFLE printf
ZINGBOFFLE(“Hello,world.”);
虽然没有理由这样做。你还需知道,有些作者将#define定义的符号常量称作宏(符号常量也叫做明显常量(manifest constant))。然而,在本书中,宏指的是下一节将描述的一种结构(construction)。
2.使用#define创建函数宏
也可以使用编译指令#define来创建函数宏。函数宏是一种简写,使用简单的东西来表示复杂的东西。其名称中之所以包含”函数”两字,是因为这种宏能接受参数,就像真正的函数那样。函数宏的优点之一是,其参数对类型不敏感。因此,您可以将任何数值类型的变量传递给接受数值参数的函数宏。
请看一个例子,下面的预处理器编译指令:
#define HALFOF(value)((value)/2)
定义了一个名为HALFOF的宏,该宏接受一个名为value的参数。预处理器将源代码中的所有HALOF宏替换为相应的定义文本,并在必要时插入参数。因此,下面的代码行:
Result=HALFOF(10);
将被替换为:
Result=((10)/2);
同样,下面的代码行:
Printf(*%f,HALFOF(x[1]+y[2]));
将被替换为:
Printf(“%f”,((X[1]+Y[2])/2));
宏可以有多个参数,而其中每个参数都可以在替换文本中出现多次。例如,下面的宏计算5个数的平均值,它有5个参数:
#define AVGS(V,W,X,Y,Z)(((V)+(W)+(X)+(Y)+(Z))/5)
下面的宏使用了每个参数两次(其中的条件运算符确定两个值中那个更大,条件运算符在第4天得课程中介绍过)
3.宏和函数
你知道,可以使用函数宏代替真正的函数,至少在代码相对简短时是这样的。函数宏可以超过一行,但是不太可能包含很多行。
B:使用编译指令#include
你已经知道如何使用预处理器编译指令#include来包含文件。遇到编译指令#include时,预处理读取指定的文件,并将其插入到该编译指令所在的位置。在编译指令#include中,不能使用通配符*或?来包含一组文件,但可以嵌套编译指令#include。换句话说,被包含的文件可以包含#include编译指令,而该编译指令指定的文件也是可以包含#include编译指令。
在编译指令#include中指定文件名的方式有两种。如果文件名用尖括号括起,如#include<stidio.h>,则预处理器将首先在标准目录中查找该文件。如果没有找到或没有指定标准目录,则编译将在当前目录中查找。
C:使用#if,#elif,#else和#endif
这4个预处理器编译指令用于控制有条件的编译。有条件的编译意味着仅当特定的条件满足时,才对源代码进行编译。在很多方面,预处理器编译指令#if与if语句类似,区别在于,if语句控制特定的语句是否执行,而#if控制是否编译。
#if语句块的结构如下:
#if condition_1
Statement_block_1
#elif condition_2
Statement_block_2
......
#elif condition_n
Statement_block_n
#else
Default_statement_block
#endif
#if使用的测试表达式可以是结果为常量的任何表达式。不能使用sizeof()运算符、强制类型转换或float类型。#if最常用于检测#include编译指令创建的符号常量。
其中每个statement_block由一条或多条语句组成,这些语句可以是任何类型的语句,包括预处理器编译指令。无需使用花括号将它们括起,虽然也可以这样做。
编译指令#if和#endif是必不可少的,而#elif和#else是可选的。可以有任意多个#elif编译指令,但#else只能有一个。编译器遇到编译指令#if后,将检测相应的条件。如果为true(非零),则对#if后面的语句进行编译;如果为false(零),则编译器依次检测每个#elif编译指令中的条件,并对第一个条件为true的#elif编译指令中的语句进行编译。如果任何一个#elif的条件都不为true,则对#else编译指令后面的语句进行编译。
注意:#if...#endif结构中的语句块最多有一个被编译。如果其中没有#else编译指令,则可能没有任何语句被编译。
这些条件编译指令的用途只受您的想象力限制。下面一个例子。假设你要编写的程序将使用大量国家特有的信息,而每个国家的这种信息都被存储在一个头文件中,则要针对不同的国家编译该程序,可以使用下面这样的#if...#endif结构:
#if ENGLAND == 1
#include “england.h”
#elif FRANCE == 1
#include “brance.h”
#elif ITALY == 1
#include “italy.h”
#else
#include “usa.h”
#endif
然后,通过使用#define来定义适合的符号常量,便可以控制在编译期间将哪个头文件包含进来。
D:使用#if...#endif来帮助调试
#if...#endif的另一种常见的用途是,用于包含有条件的调试代码。你可以定义一个名为DEBUG的符号常量,并将其设置为0或1.然后,在程序中插入调试代码,如下所示:
#if DEBUG == 1
Debugging code here
#endif
在程序开发阶段,将DEBUG定义为1,可将调试代码包含进来,帮助查找bug。程序能够正常运行后,可以将DEBUG重新定义为0,并重新编译程序,这样调试代码将不会被包含进来。
编写有条件的编译指令时,defined()运算符很有用。该运算符检查某个名称是否已被定义。因此下面的表达式NAME是否被定义,而为true或false;
Defined(NAME);
通过使用defined(),可以根据名称是否被定义对编译进行控制,而不管该名称的值是多少。对于前面的调试代码,可以将#if...#endifz重写为:
# defined (DEBUG)
Debugging code here
#endif
也可以使用defined()来这样做,即使当某个名称没有被定义时,才定义它。可以像下面这样使用NOT运算符(!);
#if !defined(TRUE) /*if TRUE is not defined */
#define TRUE 1
#endif
Defined()运算符不要求名称被定义为特定的值。例如:下述代码定义了RED,但并没有将它定义为某个特定的值:
#define RED
即使是这样,表达式defined(RED)的值任为TRUE。当然,源代码中的RED将被删除,不用任何东西替换它,因此应小心使用这种定义方式。
94.Flash(内存表格查询表)
内存型号ID:
Alsp/mediatek/build/tools/emigen/MT6572/MemoryDeviceList_MT6572.xls
内存分配表:
Alsp/mediatek/build/tools/ptgen/MT6582/partition_table_32x4_MT6582.xls
95.设置3个组合键进入FactoryMode
为了减少End Users在使用手机的过程中由于误操作进入FactoryMode的几率,增加了1个键,让客户进入FactoryMode需要同时按下3个组合键(Power Key+VolumeDown+物理按键).
[Solution]
1.在apls/mediatek/platform/mt65xx/lk/factory.c中factory_check_key_trigger函数中修改。
If(mtk_detect_key(MT65xx_FACTORY_KEY)&&mtk_detect_key(MT65XX_FACTORY_KEY2))
2.在cust_key.h中加入#define MTK65xx_FACTORY_KEY2 XX(参照MTK65xx_FACTORY_KEY定义对应的key)
3.第2步添加的MTK65XX_FACTORY_KEY2的值必须是在cust_kpd.h中
KPD_INIT_KEYMAP中已定义的物理按键的数值。
96.MTK Android Driver:Key,Home键,返回键,菜单键
A:按键配置:DCT(Driver CustomMizatoin Tool)
Alps/mediatek/custom/m707_ddr2/kernel/dct/dct/codegen.dws
Alps/mediatek/source/dct/DrvGen.exe
B:客制化,按键定义表
De-bounce time,Power key Eint Gpio,DownLoadKey,
Mode Key,Factory Key,Recovery Key
C:FactoryMode工厂模式按键定义
Alps/mediatek/custom/k6/factory/inc/cust_keys.h
D:工厂按键测试映射表,自动生成,在.dws中配置按键映射表
Alps/mediatek/custom/m707_ddr2/kernel/dct/dct/cust_kpd.h
#define KEYS_PWRKEY_MAP {KEY_POWER,”Power”}
#define DEFINE_KEYS_KEYMAP(X)
Struct key x[]=
{
KEYS_PWRKEY_MAP,
{KEY_HOME,”Home”},
{KEY_MENU,”Menu”},
{KEY_HOMEPAGE,”HomePage”},
}
E:工厂模式按键定义
#define CUST_KEY_UP KEY_UP
#define CUST_KEY_VOLUP KEY_PAGEUP //KEY_VOLUMEUP
#define CUST_KEY_DOWN KEY_DOWN
#define CUST_KEY_VOLDOWN KEY_VOLUMEDOWN //KEY_VOLUMEDOWN
#define CUST_KEY_LEFT KEY_MENU
#define CUST_KEY_CENTER KEY_HOMEPAGE
#define CUST_KEY_RIGHT KEY_BACK
#define CUST_KEY_CONFIRM KEY_VOLUMEUP //KEY_HOME
#define CUST_KEY_BACK KEY_POWER
F:Recovery Mode恢复模式按键定义
Alps/mediatek/custom/m707_ddr2/recovery/inc/cust_keys.h
#define RECOVERY_KEY_DOWN KEY_VOLUMEDOWN
#define RECOVERY_KEY_UP KEY_VOLUMEDOWN
#define RECOVERY_KEY_ENTER KEY_VOLUMEUP
#define RECOVERY_KEY_MENU KEY_POWER
G:Home键添加唤醒功能
Alps/mediatek/config/m707_ddr2/mtk-kpd.kl
Key 102 HOME WAKE
96.电池曲线图
A:在mediatek/config/m803_torque/ProjectConfig.mk
AUTO_ADD_GLOBAL_DEFINE_BY_NAME=MTK_MULTI_BAT_PROFILE_SUPPOR
MTK_MULTI_BAT_PROFILE_SUPPORT=yes
Alps/mediatek/custom/m803_torque/kernel/battery/battery/cust_battery_meter_table.h
Alps/mediatek/custom/mt6572/kernel/battery/battery/
生成文件:
Out/target/product/m707_ddr2/obj/KERNEL_OBJ/source/mediatek/kernel/drivers/power/battery_meter.c(#ifdef MTK_MULTI_BAT_PROFILE_SUPPORT)
Cust_battery.h
Cust_battery_meter.h
Cust_battery_meter_table.h
Cust_charging.h
Cust_fuel_gauge.h
97.Camera调试
Custom_hal_camera=camera
Custom_hal_imgsensor=sp0a19_yuv
Custom_kernel_imgsensor=sp0a19_yuv
Custom_hal_main_imgsensor=sp0a19_yuv
Custom_kernel_main_imgsensor=sp0a19_yuv
Kernel
Mediatek/custom/common/kernel/imgsensor/
Mediatek/custom/common/kernel/imgsensor/src/
Kd_imgsensor.h
Kd_sensorlist.h
Hal
Mediatek/custom/common/hal/imgsensor/
Sensorlist.cpp
拍照图片尺寸设置
Mediatek/custom/m707_ddr2/hal/camera/camera/cfg_ftbl_custom_raw_mian.h
//capture size
Config_feature(fid_cap_size,by_default(capture_size_1600_1200))
Camera角度旋转
Alps/mediatek/config/m707_ddr2/ProjectConfig.mk
Mtk_lcm_physical_rotation=0
98.传感器
Mtk_sensor_support=yes
Custom_kernel_accelerometer=auto //重力加速度传感器
Custom_kernel_magnetometer=akm8975 //磁感应器
Custom_kernel_alsps=tmd2771 //光感,距离传感器
Custom_kernel_barometer=xx //气压计
Custom_kernel_gyroscope=xx //螺旋仪
99.GPIO/EINT/ADC/KEYPAD/PMIC/配置,
Alps/mediatek/custom/m707_ddr2/kernel/dct/dct/codegen.dws
Alps/mediatek/source/dct/DrvGen.exe
100.物理按键,工程模式之名称定义
Alps/mediatek/custom/m707_ddr2/factory/inc/cust_keys.h
#define KEYS_PWRKEY_MAP {KEY_POWER,”Power”}
#define DEFINE_KEYS_KEYMAP(X)
Struct keyx[]={
KEYS_PWRKEY_MAP,
{KEY_HOME,”Home”},
{KEY_MENU,”Menu”},
{KEY_HOMEPAGE,”HomePage”}
}
#define CUST_KEY_UP KEY_UP
101.PM充电
A:配置文件位置
CUSTOM_KERNEL_BATTERY=battery
Mediatek/custom/m707_ddr2/kernel/battery/battery/cust_battery.h
Mediatek/custom/m707_ddr2/kernel/battery/battery/custom_fuel_gauge.h
Mediatek/platform/m6573/kernel/drivers/power/mt6573_battery.c
B:充电常用参数修改
Mediatek/custom/m707_ddr2/kernel/battery/battery/cust_battery.h
C:充电电流修改
#define USB_CHARGER_CURRENT cust_cc_550ma;
#define AC_CHARGER_CURRENT cust_c_800ma;
D:充电电阻设定(根据硬件的BOM)
#define R_CURRENT_SENSE2 //0.2 ohm,0.2欧姆
E:充电温度检测设定(开启,关闭)
#define BAT_TEMP_PROTECT_ENABLE 1
#define BAT_NTC_TSM_1
#define BAT_NTC_101 //define BAT_NTC_470
//#define BAT_NTC_TSM_1
其他:
#define V_CHARGER_MIN 4400 //benmodify 4400 4.4v
#define V_CHARGER_ENABLE 1 //1:ON,0:OFF
F:电池电量检测
Alsp/mediatek/custom/m707_ddr2/kernel/battery/battery/cust_fuel_gauge.h
#define Q_MAX_POS_50 ((BATT_CAPACITY*1316)/1307) //ben modify,3121
#define Q_MAX_POS_25 BATT_CAPACITY //ben modfiy,3100
#define Q_MAX_PAS_0 ((BATT_CAPACITY*1220)/1307) //ben modfiy,2893
#define Q_MAX_NEG_10 ((BATT_CAPACITY*1162)/1307) //ben modfiy,2756
#defineQ_MAX_POS_50_H_CURRENT
((BATT_CAPACITY* 1295) / 1307) //ben modfiy //3071 // : 2534
#defineQ_MAX_POS_25_H_CURRENT
((BATT_CAPACITY* 1270) / 1307) //ben modfiy //3012 // : 2534
#defineQ_MAX_POS_0_H_CURRENT
((BATT_CAPACITY *1102) / 1307) //ben modfiy //2613 // : 2534
#defineQ_MAX_NEG_10_H_CURRENT
((BATT_CAPACITY* 599) / 1307) //ben modfiy //1420 // : 2534
G:充电界面显示修改
Mediatek/custom/m707_ddr2/lk/include/target/cust_display.h
Mediatek/external/ipod/bootlogo.cpp
H:电池型号,容量替换,需要修改:电池曲线
Mediatek/custom/m707_ddr2/kernel/battery/battery/cust_battery.h
Mediatek/custom/m707_ddr2/kernel/battery/battery/custom_fuel_gauge.h
102.Modem
850 band5
900 band8
1700 band4
1900 band2
2100 band1
103.Mac终端,常用命令
A:列出文件
Ls 参数 目录名 例如:/system/library/extensions
B:转换目录
Cd 例如:/system/library/extensions
C:建立新目录
Mkdir 目录名 mkdir/User/用户名/Desktop/backup
D:拷贝文件
Cp 参数 源文件 目标文件
例如:cp -R /User/用户名/Desktop/Natit.text /System/Library/Extensions
E:删除文件
Rm 参数 文件 例如:rm -rf /System/Library/Extensions.text
F:移动文件
Mv 文件 例如:mv /System/Library/Extensions/book.text /System/Library/
G:显示当前目录的路径名
Pwd ...
Find -name *.mk | xargs grep -rn “”
Grep “” -r *
Svn log path -v -l3 查看最近修改的3个版本
Svn log path 查看这个路径下的信息
Svn diff -r 28:25 path 查看两个版本之间的差异
Svn merge -r 28:25 path 回滚到上一个版本
Svn ci -m “Revert revision from r28 to 25” path 提交
Sudo chmod -R 777 mediatek/frameworks
History
Adb install -r path[应用程序]
Adb remount
Adb push[path]
Adb reboot
************************2015.0817.15***************************
bootable/bootloader/lk/project/m808.mk
build/target/project/m808.mk
mediatek/config/m808/ProjectConfig.mk
mediatek/custom/m808
vendor/mediatek/m808
vendor/mediatek/m808/artifacts/out/project/m808
vendor/otot_custom/m808
mediatek/custom/common/lk/logo/wvga
build/tools/buildinfo.sh
Java做客制化:
String value=android.os.SystemProperties.get("ro.m802.camera43","no");
if(value.equals("yes")){
}
C做客制化:
#elif PROJECT_M715_EMMC_SUPPORT
sprintf(common->inquiry_string,"%s","Aplus Gen4");
根据条件查询:
grep "内容" -r *
修改蓝牙名称、USB硬件名称、WIFI热点名称、电脑显示名称
mediatek/config/m715_emmc/custom.conf
bluetooth.HostName=AplusGen4
wlan.SSID=AplusGen4
kernel/drivers/usb/gadget/f_mass_storage.c
#elif PROJECT_M715_EMMC_SUPPORT
sprintf(common->inquiry_string,"%s","Aplus Gen4");
frameworks/base/wifi/java/android/net/wifi/p2p/wifip2pservice.java
String value=android.os.SystemProperties.get("ro.custom.m803","no");
if(value.equals("yes")){
return "Q-Smart Qs470";//wifi直连的名称
}
kernel/drivers/usb/gadget/android.c //连接电脑显示
find -name *.mk|xargs grep -rn ""
grep "" -r *
svn log path -v -l3 //查看最近修改的3个版本
svn log path //查看这个路径下的信息
svn diff -r 28:25 path //查看两个版本之间的差异
svn merge -r 28:25 path //回滚到上一个版本
svn ci -m "Revert revision from r28to25" path //提交
(svn up -r969 //如果知道上一个版本,可以用这个命令返回到上一个版本)
sudo chmod -r 777 mediatek/frameworks
history
windows adb install -r path [应用程序]
下载APK(push)
1.adb remount
2.adb push path
3.adb reboot
#ifdef project_m801_celkon_support
代码块;
#elif project_m802_master_support
代码块;
#else
代码块;
#endif
CUSTOM_MODEM=MBK72_WET_JB3_GPRS_SKY77582_M707
850 band5
900 band8
1700 band4
1900 band2
2100 band1
64+8/8+1
32+4/4+512
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。