MTKAndroid平台开发流程
本篇给⼤家详细讲解了MTKAndroid平台开发流程,⼤致分为44个步骤,我们把每个步骤的命令详细讲解了下,⼀起来学习下。
1.拷贝代码仓库从git@19
2.168.1.3:a89.git到work⽬录下:
cbk@YCS:~/work$ll
cbk@YCS:~/work$rm-rfa89/
cbk@YCS:~/work$cd..
cbk@YCS:~/work$gitclonegit@192.168.1.3:a89.git
2.修改xshell⽤户密码:passwd
3.Android查看源代码的版本号
1.)编译的时候在终端中⼀开始就会打印出来:PLATFORM_VERSION:
2.
3.1
2.)直接去make⽂件中去看:build\core\version_defaults.mk//搜索该⽂件中的PLATFORM_VERSION值
4.编译具体appsudoku,源码⽂件包位于..\package\app\sudoku,命令为:
./mkmmpackage/app/sudoku
5.设置eclipse选择启动不同的AVD设置⽅式:
eclipse中右击指定app⽂件夹、选择Runas->Runconfigrations,弹出界⾯选择Target项,选择指定的AVD。(debug⽅式类似设置)
6.adb命令
adbdevice:查看当前的链接的设备情况
adblogcat>my.log:打印当前的log记录到⽂件my.log中
7.adb⽆法启动问题分析:
adbkill-server,然后adb–startserver
8、9.SDK的android类库是android源码⼯程的裁剪(SLIM)版本,不集成"@hide"类型的成员函数。故存在SDK上编译的apk到处通⾏,源码⼯程上编译的apk很多情况下不能直接加载上其他软件版本的平台上。
10.打印查看项⽬的DENSITY_DEVICE,便于项⽬确认对应drawable⽂件夹:
res=getResources();//Resources();
DisplayMetrics();
density_device_value=dm.DENSITY_DEVICE;
11.Flashtool下载时候提⽰preloadusbvcomport驱动没有安装,需要安装指定路径:
D:\Tools\Mtk_release_Tools_W1316\Driver(binary)\SP_Drivers_v1.5\SP_Drivers_v1.5
另外需要⽹上下载mt65xx+preloader+驱动,将其中⽂件usb2ser.sys改名为usbser.sys拷贝到C:\WIND
OWS\system32\drivers下⾯
备注:如果安装驱动不成功,有可能是系统中缺少usbser.sys和mdmcpq.inf⽂件导致的。可以将本⽂档所在路径附带的usbser.sys拷贝到C:\WINDOWS\system32\drivers下⾯,将mdmcpq.inf拷贝到C:\WINDOWS\inf即可。
12.默认壁纸的修改
a.屏幕上锁屏界⾯背景图⽚:
若是mtkslidelockscreen,可替换下⾯⽂件修改锁界⾯时背景图⽚
\mediatek\source\frameworks\banyan\res\res\drawable\lockscreen_default_wallpaper.png
若是androiddefaultlockscreen,可替换下⾯⽂件修改锁界⾯时背景图⽚
\frameworks\base\core\res\res\drawable\default_wallpaper.jpg
b.静态壁纸:
我们可能会在系统的壁纸选择中加⼊我们⾃⼰的壁纸,系统壁纸是Launcher模块中加⼊的,我们只需
要修
改:./packages/apps/Launcher2/res/l在其中加⼊我们修改的壁纸的<item>wallpaperName</item>即可。
c.动态壁纸:
修改frameworks/base/core/res/res/l⽂件中到<stringname=”default_wallpaper_component”>@null</string>,修改为
<stringname=”default_wallpaper_component”>com.android.wallpaper/.nexus.NexusWallpaper</string>
其中com.android.wallpaper/.nexus.NexusWallpaper,”/”前为包名,后为类名
备注:如果要将内置到系统中的⽆sourcecode的第三⽅动态壁纸程序设置为默认动态壁纸,则需要知道该apk中WallpaperService对应的类名和包名,可以通过Google提供的apk-tool⼯具来得到该apk的资源⽂件,那么就可以通过查看l⽂件去查到对应的WallpaperService的类名和包名。
13.logo⽂件存放位置:
alps\mediatek\custom\common\uboot\logo\logo_folder
logo_folder:定义在..\mediatek\config\XXXX\ProjectConfig.mk中BOOT_LOGO=wsvganl
14.Lcd⽂件存放位置:
alps\mediatek\custom\common\kernel\lcm\lcd_folder
alps\mediatek\custom\common\uboot\lcm\lcd_folder
lcd_folder:定义在..\mediatek\config\XXXXProjectConfig.mk中:
CUSTOM_UBOOT_LCM=zs070#nt35510
CUSTOM_KERNEL_LCM=zs070#nt35510
15.camera⽂件存放位置:
alps\mediatek\custom\common\kernel\imgsensor\camera_folder
camera_folder:定义在..\mediatek\config\XXXX\ProjectConfig.mk中:
CUSTOM_HAL_IMGSENSOR=hi253_yuvgc0309_yuv#ov5647_rawhi704_yuv
CUSTOM_HAL_MAIN_IMGSENSOR=hi253_yuv#ov5647_raw
CUSTOM_HAL_SUB_IMGSENSOR=gc0309_yuv#hi704_yuv
CUSTOM_KERNEL_IMGSENSOR=hi253_yuvgc0309_yuv#ov5647_rawhi704_yuv
CUSTOM_KERNEL_MAIN_IMGSENSOR=hi253_yuv#ov5647_raw
CUSTOM_KERNEL_SUB_IMGSENSOR=gc0309_yuv#hi704_yuv
16.请教,android中如果修改了资源⽂件,如res/l⽂件中的内容,那么如何编译⽣效?我将该模块重新编译了⼀下如mmmpath/module-name,但是好像没有⽣效
删掉⽣成的jar包就OK了。具体在out/target/common/obj⽬录下
./mkk6mmpackages/apps/Launcher2
删除apk⽂件alps\out\target\product\k6\system\app
./mksystemimage
17.⼯程基本配置⽂件:
mediatek\config xx\ProjectConfig.mk
build\target\product\common.mk
18.如何将ProjectConfig.mk中的宏(注意添加的宏必须⼤写)添加到C/C++源⽂件的接⼝:
[KEYWORD]
AUTO_ADD_GLOBAL_DEFINE_BY_NAME
AUTO_ADD_GLOBAL_DEFINE_BY_VALUE
AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE
19.如何分别配置基线⼯程和特定项⽬的开关、代码:
需要被所有⼯程⽤到的代码或配置放在以下⽬录:
mediatek/customer/common
mediatek/config/common
只被⼀个专⽤⼯程⽤到的配置和代码应该放在什么位置?
mediatek/customer/$project$
mediatek/config/$project$
20.如何共享含很多Linux软链接的代码⼯程给他⼈:
解压代码包后,⾥⾯有很多linux的软链接并且编译后也会⽣成很多软链接,如何将代码复制给其他⼈,并且也可以正常编译很重要。
禁⽌以下⽅法压缩软件:
1.不能在windows下⽤压缩软件压缩或⽤复制粘贴的⽅式
2.不能再linux下⽤右键压缩的⽅法压缩代码;以上⽅式都是使链接失效。
正确的⽅法是:tarczfv<project_name>.alps
其中<project_name>为任意名字,最好是项⽬+版本的命名⽅式,alps为源代码⽬录,已当前要压缩的⽬录为准。
21.编译⽤户版软件(UserBuild)的命令是什么
./makeMtk-opt=TARGET_BUILD_VARIANT=user${projectname}new
${projectname}为客户的⼯程名
22.GCC⼯具链
GCC:(GNUCompilerCollection,GNU编译器集合)是⼀套由GNU⼯程开发的⽀持多种编程语⾔的编译器。GCC是⾃由软件发展过程中的著名例⼦,由⾃由软件基⾦会以GPL协议发布。GCC是⼤多数类Unix操作系统(如Linux、BSD、MacOSX等)的标准的编译器,GCC同样适⽤于微软的Windows。
GCC⼯具链:
23.android不同版本代号含义(GB,GB2,ICS,ICS2,JB)
AndroidV2.3(GB,GB2)
AndroidV4.0(ICS,ICS2):冰淇淋
AndroidV4.1(JB):果冻⾖
24.Android2.3如何将MTK滑动锁屏替换为google默认滑动锁屏:
请修改alps/mediatek/config/project_name/ProjectConfig.mk,将其中的
MTK_LOCKSCREEN_TYPE=2
修改为
MTK_LOCKSCREEN_TYPE=1
,修改后请重新buildproject
25JBframeowork资源添加新规则
JB版本代码与之前的有点区别,就是在JB中添加frameworkresource,必须在
alps\frameworks\base\core\res\res\l中声明,才会⽣成resourceID.
drawable<java-symboltype="drawable"name="xxx"/>name
frameworkinternalbuildAndroidSDK
apk<publictype="drawable"name="xxx"/>的⽅式声明为frameworkpublic资源,注意,不需要写id的值,且编译时,需要⼿动updateapi。26.如何修改默认主题为mtkslicer(纤薄主题)
1frameworks/base/core/java/android/context/res/Configuration.javaSKIN_UNDEFINED
"/system/framework/theme-res-slicer.apk"
2frameworks/base/libs/utils/AssetManager.cppopenNonAssetString8
themeRes("/system/framework/framework-res.apk");String8themeRes("/system/framework/theme-res-slicer.apk");
3mediatek/source/frameworks/themes/theme-res-slicer/res/drawable-*dpilockwallpaper.png
mediatek/source/frameworks/banyan/res/res/drawablelockscreen_default_wallpaper.png
lockscreen_default_wallpaper.png
4mediatek/source/frameworks/themes/theme-res-slicer/res/drawable-*dpithemewallpaper.png
frameworks/base/core/res/res/drawabledefault_wallpaper.pngdefault_wallpaper.jpg
27.如何在主题管理(ThemeManager)中,客制化添加⼀套⾃⼰的Theme
1、在alps/mediatek/source/frameworks/themes⽬录下,添加您⾃⼰的资源⽬录theme-res-
xxx,以原有的3套theme为例⼦来参考即可,您需要为新添加的theme-res-xxx准备相应的资源和
Android.l等⽂件
2、在alps/build/target/product/common.mk⽂件中,到MTK_THEMENANAGER_APP这个关键字,在
如下这个判断中,添加⾃⼰的资源包的名字
ifeq($(strip$(MTK_THEMEMANAGER_APP)),yes)
PRODUCT_PACKAGES+=theme-res-mint\
theme-res-mocha\
theme-res-raspberry\
theme-res-xxx
endif
28.如何让⾃⼰开发的Application,能适应主题管理(ThemeManager)中的各种主题风格
1、编辑alps/frameworks/base/data/l⽂件按照已有的app的样式添加您⾃⼰的
app所想要替换的resource的名称,可以参考Launcher2。
2、为⾃⼰的app在alps/mediatek/source/frameworks/themes/theme-res-xxx(themename)⽬录下
添加具体风格所对应的资源,按照已有的app的样式来添加;同样以Launcher2为例,注意这⾥的资
源放置路径要跟原始app⾥⾯被替换的资源的路径保持⼀样,资源的名称也要保持⼀样。
29.⾮hdpi项⽬,状态栏刷新、或者list列表界⾯等出现显⽰内容花屏、错乱的情况,是什么原因
MTKrelease给客户的⼯程,在75平台、AndroidV2.3和V4.0的版本上,默认只会buildhdpi资源到系统⾥,也就是
说,alps/meidatek/config/xxx/ProjectConfig.mk中的MTK_PRODUCT_LOCALESdefault只加⼊了hdpi,如果客户的项⽬不是hdpi的,就可能出现这种显⽰错乱的情况。
解决的⽅法:请客户针对其他⾮hdpi的项⽬,⼿动加⼊相应的*dpi到MTK_PRODUCT_LOCALES⾥:HVGA分辨率需要加⼊mdpi这⼀项;QVGA需要加⼊ldpi这⼀项。
30.⼆级菜单的背景图⽚:
进⼊设置时默认的⿊⾊背景,放在
/frameworks/base/core/res/res/drawable-nodpi/backgroud_holo_dark.jpg。
默认壁纸在系统源码⾥是放在/frameworks/base/core/res/res/drawable-large-nodpi和drawable-xlarge-nodpi下的default_wallpaper.jpg,
31.6589项⽬如何关闭NavigationBar:
默认NavigationBar的控制在alps/frameworks/base/core/res/res/l
<boolname=“config_showNavigationBar”>true</bool>
/
/6589MTKDemoProjectNavigationBarResourceOverlayNavigationBarresourceoverlay:
6589navigationBar最终控制在,会覆盖掉上述设置:
制作android软件流程alps/mediatek/custom/project_name/resource_overlay/generic/frameworks/base/core/res/res/l
<boolname=“config_showNavigationBar”>true</bool>
32..9.png图⽚制作
java的jdk、android的sdk中tools⽬录下的draw9patch.bat
33.如何去掉状态栏和标题栏
修改对应的Activity,添加以下代码:
finalWindowwin=getWindow();
win.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);//removestatusbar
requestWindowFeature(Window.FEATURE_NO_TITLE);
requestWindowFeature(Window.FEATURE_PROGRESS);//removetitlebar
注意:必须添加在setContentView()⽅法之前,否则将提⽰错误。
34.如何在状态栏上增加⼀个icon、如何调整状态栏icon之间的显⽰顺序:
具体查看:MTK_on_line_FAQ_SW_ALPS_20130123.pdf
35.在任意⾮锁屏界⾯,按某个预设定好的按键进⼊某个Activity的功能
PhoneWindowManager.java:interceptKeyBeforeDispatching()----按键响应统⼀处理接⼝
具体查看:MTK_on_line_FAQ_SW_ALPS_20130123.pdf
36.如何⾃定义把⼯程模式的暗码:
*#*#3646633#*#*
alps/mediatek/source/packages/EngineerMode/src/com/mediatek/engineermode/EngineerModeReceiver.java //process*#*#3646633#*#*
UriengineerUri=Uri.parse("android_secret_code://3646633");
alps/mediatek/source/packages/l
<receiverandroid:name=".EngineerModeReceiver">
<intent-filter>
<actionandroid:name="android.provider.Telephony.SECRET_CODE"/>
<dataandroid:scheme="android_secret_code"android:host="3646633"/>
</intent-filter>
</receiver>
37.触屏的震动响应接⼝
调⽤native⽅法来开启和关闭vibrator:
nativestaticvoidvibratorOn(longmilliseconds);
nativestaticvoidvibratorOff();
调⽤⽅法如下:VibratorService.vibratorOn()
38.Database位置和读取⽅式:
以下是database的路径(GB2andICS的project):
-MAUIMETAdatabaseisunderpath:
alps\mediatek\custom\common\modem\${Project}\BPLGUInfoCustomApp_MTXXX_S01_MAUI_XXX
-ALPSMETAdatabaseisunderpath:
alps\mediatek\source\cgen\APDB_MTXXX_S01_ALPS.XXXX_WXXX
Metatool有两种类型:
⼀种是MAUIMetaTool,⽤来读和修改modem的nvram数据。
另⼀种是SP_META,⽤来读和修改androidapp端的nvram数据。
Nvram数据读取⽅式: