mtk新建工程

来源:互联网 发布:当前时间与系统时间js 编辑:程序博客网 时间:2024/05/17 23:49

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是星期几

 

相关逻辑:
然后,在DateFormatgetDateFormatStringForSetting方法中,对取得的格式进行了处理,对于每一项都会进行替换处理。

 

比如对于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>
这样显示到界面上就是“20131231日,星期一

对于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/inccustom_MemoryDevice.h

/*MTK 6573每个片选的范围是 2Gb,默认用CS0来片选 , 如果外挂的RAM4Gb的话 ,还需要用到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功能

此功能打开后会将sdcarddata分区合并,只能使用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.cftm_test_item[]中未定义该测项

 

请务必确定alps/mediatek/factory/src/factory.cftm_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.cftm_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_NAMEAUTO_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-FiBT等中英版本中均使用英文的测项,一定首先检查factory modefactory.ini的语言版本是否相同。

注意,此处查看的factory.ini是指手机端etc目录下面

 

89.如何编译ICU资源

如果只是测试修改后效果,执行步骤A即可;如果需要build后生效,则需要执行全部步骤

下面是KKicu资源的路径为例子,如果是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

 

KKicudt51l.dat

Android Licudt53l.dat

B. COPY所需文件

将第一步生成的external\icu4c\icubuild\data\out\tmp\icudtxxl.dat复制到external\icu4c\stubdata下并改名为icudtxxl-all.dat,覆盖原来的同名文件。

KK版本是icudt5l.daticudt5l-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.mkSUPPORT_GB2312 := yes改为no

GB3,JB,JB2版本:

\mediatek\factory\src\miniui\font.mkSUPPORT_GB2312 := yes改为no

JB3JB3之后版本:

\mediatek\config\[project name]\ProjectConfig.mk

\mediatek\config\common\ProjectConfig.mkMTK_FACTORY_MODE_IN_GB2312=yes改为no

2)参考uistrings_eng.hfactory.ini中各MenuItem翻译为英文。
例如:
MenuItem=Keys;
MenuItem=Jogball;
MenuItem=OpticalFingerNavi;
MenuItem=Touch Panel;

3)重新build,再验证,可以使用ADB commandcat /etc/factory.ini)来验证手机中的factory.ini是否有更新成功。

 

 

91.如何修改出厂默认日期和默认时区

FAQ Content

[DESCRIPTION]

手机第一次开机默认是没有定制时区的(默认是GMT+00:00),但是会有一个默认日期,如201311日。

如何客制化默认时区以及时间呢?

[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
systemReady()

……

if(isFirstBoot){
Time today = new Time(Time.getCurrentTimezone());
today.setToNow();   // 将时间恢复到RTC时间

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.xmldefault_restore_year 修改成 2013

Android Lvendor\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个预处理器编译指令用于控制有条件的编译。有条件的编译意味着仅当特定的条件满足时,才对源代码进行编译。在很多方面,预处理器编译指令#ifif语句类似,区别在于,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的符号常量,并将其设置为01.然后,在程序中插入调试代码,如下所示:

#if DEBUG == 1

Debugging code here

#endif

在程序开发阶段,将DEBUG定义为1,可将调试代码包含进来,帮助查找bug。程序能够正常运行后,可以将DEBUG重新定义为0,并重新编译程序,这样调试代码将不会被包含进来。

编写有条件的编译指令时,defined()运算符很有用。该运算符检查某个名称是否已被定义。因此下面的表达式NAME是否被定义,而为truefalse;

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.cfactory_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

 

CFactoryMode工厂模式按键定义

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