MTK Android平臺(tái)開(kāi)發(fā)流程
本篇給大家詳細(xì)講解了MTKAndroid平臺(tái)開(kāi)發(fā)流程,大致分為44個(gè)步驟,我們把每個(gè)步驟的命令詳細(xì)講解了下,一起來(lái)學(xué)習(xí)下。
1.拷貝代碼倉(cāng)庫(kù)從git@192.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查看源代碼的版本號(hào)
1.)編譯的時(shí)候在終端中一開(kāi)始就會(huì)打印出來(lái):PLATFORM_VERSION:2.3.1
2.)直接去make文件中去看:build\core\version_defaults.mk//搜索該文件中的PLATFORM_VERSION值
4.編譯具體appsudoku,源碼文件包位于..\package\app\sudoku,命令為:
./mkmmpackage/app/sudoku
5.設(shè)置eclipse選擇啟動(dòng)不同的AVD設(shè)置方式:
eclipse中右擊指定app文件夾、選擇Runas->Runconfigrations,彈出界面選擇Target項(xiàng),選擇指定的AVD。(debug方式類似設(shè)置)
6.adb命令
adbdevice:查看當(dāng)前的鏈接的設(shè)備情況
adblogcat>my.log:打印當(dāng)前的log記錄到文件my.log中
7.adb無(wú)法啟動(dòng)問(wèn)題分析:
adbkill-server,然后adb–startserver
8、9.SDK的android類庫(kù)是android源碼工程的裁剪(SLIM)版本,不集成"@hide"類型的成員函數(shù)。故存在SDK上編譯的apk到處通行,源碼工程上編譯的apk很多情況下不能直接加載上其他軟件版本的平臺(tái)上。
10.打印查看項(xiàng)目的DENSITY_DEVICE,便于項(xiàng)目確認(rèn)對(duì)應(yīng)drawable文件夾:
res=getResources();//context.getResources();
dm=res.getDisplayMetrics();
density_device_value=dm.DENSITY_DEVICE;
11.Flashtool下載時(shí)候提示preloadusbvcomport驅(qū)動(dòng)沒(méi)有安裝,需要安裝指定路徑:
D:\Tools\Mtk_release_Tools_W1316\Driver(binary)\SP_Drivers_v1.5\SP_Drivers_v1.5
另外需要網(wǎng)上下載mt65xx+preloader+驅(qū)動(dòng),將其中文件usb2ser.sys改名為usbser.sys拷貝到C:\WINDOWS\system32\drivers下面
備注:如果安裝驅(qū)動(dòng)不成功,有可能是系統(tǒng)中缺少u(mài)sbser.sys和mdmcpq.inf文件導(dǎo)致的。可以將本文檔所在路徑附帶的usbser.sys拷貝到C:\WINDOWS\system32\drivers下面,將mdmcpq.inf拷貝到C:\WINDOWS\inf即可。
12.默認(rèn)壁紙的修改
a.屏幕上鎖屏界面背景圖片:
若是mtkslidelockscreen,可替換下面文件修改鎖界面時(shí)背景圖片
\mediatek\source\frameworks\banyan\res\res\drawable\lockscreen_default_wallpaper.png
若是androiddefaultlockscreen,可替換下面文件修改鎖界面時(shí)背景圖片
\frameworks\base\core\res\res\drawable\default_wallpaper.jpg
b.靜態(tài)壁紙:
我們可能會(huì)在系統(tǒng)的壁紙選擇中加入我們自己的壁紙,系統(tǒng)壁紙是Launcher模塊中加入的,我們只需要修改:./packages/apps/Launcher2/res/values-mdpi/wallpapers.xml在其中加入我們修改的壁紙的<item>wallpaperName</item>即可。
c.動(dòng)態(tài)壁紙:
修改frameworks/base/core/res/res/values/config.xml文件中找到<stringname=”default_wallpaper_component”>@null</string>,修改為
<stringname=”default_wallpaper_component”>com.android.wallpaper/.nexus.NexusWallpaper</string>
其中com.android.wallpaper/.nexus.NexusWallpaper,”/”前為包名,后為類名
備注:如果要將內(nèi)置到系統(tǒng)中的無(wú)sourcecode的第三方動(dòng)態(tài)壁紙程序設(shè)置為默認(rèn)動(dòng)態(tài)壁紙,則需要知道該apk中WallpaperService對(duì)應(yīng)的類名和包名,可以通過(guò)Google提供的apk-tool工具來(lái)得到該apk的資源文件,那么就可以通過(guò)查看AndroidManifest.xml文件去查找到對(duì)應(yīng)的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.請(qǐng)教,android中如果修改了資源文件,如res/values/string.xml文件中的內(nèi)容,那么如何編譯生效?我將該模塊重新編譯了一下如mmmpath/module-name,但是好像沒(méi)有生效
刪掉生成的jar包就OK了。具體在out/target/common/obj目錄下
./mkk6mmpackages/apps/Launcher2
刪除apk文件alps\out\target\product\k6\system\app
./mksystemimage
17.工程基本配置文件:
mediatek\config\xxx\ProjectConfig.mk
build\target\product\common.mk
18.如何將ProjectConfig.mk中的宏(注意添加的宏必須大寫(xiě))添加到C/C++源文件的接口:
[KEYWORD]
AUTO_ADD_GLOBAL_DEFINE_BY_NAME
AUTO_ADD_GLOBAL_DEFINE_BY_VALUE
AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE
19.如何分別配置基線工程和特定項(xiàng)目的開(kāi)關(guān)、代碼:
需要被所有工程用到的代碼或配置放在以下目錄:
mediatek/customer/common
mediatek/config/common
只被一個(gè)專用工程用到的配置和代碼應(yīng)該放在什么位置?
mediatek/customer/$project$
mediatek/config/$project$
20.如何共享含很多Linux軟鏈接的代碼工程給他人:
解壓代碼包后,里面有很多l(xiāng)inux的軟鏈接并且編譯后也會(huì)生成很多軟鏈接,如何將代碼復(fù)制給其他人,并且也可以正常編譯很重要。
禁止以下方法壓縮軟件:
1.不能在windows下用壓縮軟件壓縮或用復(fù)制粘貼的方式
2.不能再linux下用右鍵壓縮的方法壓縮代碼;以上方式都是使鏈接失效。
正確的方法是:tarczfv<project_name>.tar.gzalps
其中<project_name>為任意名字,最好是項(xiàng)目+版本的命名方式,alps為源代碼目錄,已當(dāng)前要壓縮的目錄為準(zhǔn)。
21.編譯用戶版軟件(UserBuild)的命令是什么
./makeMtk-opt=TARGET_BUILD_VARIANT=user${projectname}new
${projectname}為客戶的工程名
22.GCC工具鏈
GCC:(GNUCompilerCollection,GNU編譯器集合)是一套由GNU工程開(kāi)發(fā)的支持多種編程語(yǔ)言的編譯器。GCC是自由軟件發(fā)展過(guò)程中的著名例子,由自由軟件基金會(huì)以GPL協(xié)議發(fā)布。GCC是大多數(shù)類Unix操作系統(tǒng)(如Linux、BSD、MacOSX等)的標(biāo)準(zhǔn)的編譯器,GCC同樣適用于微軟的Windows。
GCC工具鏈:
23.android不同版本代號(hào)含義(GB,GB2,ICS,ICS2,JB)
AndroidV2.3(GB,GB2)
AndroidV4.0(ICS,ICS2):冰淇淋
AndroidV4.1(JB):果凍豆
24.Android2.3如何將MTK滑動(dòng)鎖屏替換為google默認(rèn)滑動(dòng)鎖屏:
請(qǐng)修改alps/mediatek/config/project_name/ProjectConfig.mk,將其中的
MTK_LOCKSCREEN_TYPE=2
修改為
MTK_LOCKSCREEN_TYPE=1
,修改后請(qǐng)重新buildproject
25JBframeowork資源添加新規(guī)則
JB版本代碼與之前的有點(diǎn)區(qū)別,就是在JB中添加frameworkresource,必須在
alps\frameworks\base\core\res\res\values\Public.xml中聲明,才會(huì)生成resourceID.
drawable<java-symboltype="drawable"name="xxx"/>name
frameworkinternalbuildAndroidSDK
apk<publictype="drawable"name="xxx"/>的方式聲明為frameworkpublic資源,注意,不需要寫(xiě)id的值,且編譯時(shí),需要手動(dòng)updateapi。
26.如何修改默認(rèn)主題為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為例子來(lái)參考即可,您需要為新添加的theme-res-xxx準(zhǔn)備相應(yīng)的資源和
Android.mk/AndroidManifest.xml等文件
2、在alps/build/target/product/common.mk文件中,找到MTK_THEMENANAGER_APP這個(gè)關(guān)鍵字,在
如下這個(gè)判斷中,添加自己的資源包的名字
ifeq($(strip$(MTK_THEMEMANAGER_APP)),yes)
PRODUCT_PACKAGES+=theme-res-mint\
theme-res-mocha\
theme-res-raspberry\
theme-res-xxx
endif
28.如何讓自己開(kāi)發(fā)的Application,能適應(yīng)主題管理(ThemeManager)中的各種主題風(fēng)格
1、編輯alps/frameworks/base/data/etc/thememap.xml文件按照已有的app的樣式添加您自己的
app所想要替換的resource的名稱,可以參考Launcher2。
2、為自己的app在alps/mediatek/source/frameworks/themes/theme-res-xxx(themename)目錄下
添加具體風(fēng)格所對(duì)應(yīng)的資源,按照已有的app的樣式來(lái)添加;同樣以Launcher2為例,注意這里的資
源放置路徑要跟原始app里面被替換的資源的路徑保持一樣,資源的名稱也要保持一樣。
29.非hdpi項(xiàng)目,狀態(tài)欄刷新、或者list列表界面等出現(xiàn)顯示內(nèi)容花屏、錯(cuò)亂的情況,是什么原因
MTKrelease給客戶的工程,在75平臺(tái)、AndroidV2.3和V4.0的版本上,默認(rèn)只會(huì)buildhdpi資源到系統(tǒng)里,也就是說(shuō),alps/meidatek/config/xxx/ProjectConfig.mk中的MTK_PRODUCT_LOCALESdefault只加入了hdpi,如果客戶的項(xiàng)目不是hdpi的,就可能出現(xiàn)這種顯示錯(cuò)亂的情況。
解決的方法:請(qǐng)客戶針對(duì)其他非hdpi的項(xiàng)目,手動(dòng)加入相應(yīng)的*dpi到MTK_PRODUCT_LOCALES里:HVGA分辨率需要加入mdpi這一項(xiàng);QVGA需要加入ldpi這一項(xiàng)。
30.二級(jí)菜單的背景圖片:
進(jìn)入設(shè)置時(shí)默認(rèn)的黑色背景,放在
/frameworks/base/core/res/res/drawable-nodpi/backgroud_holo_dark.jpg。
默認(rèn)壁紙?jiān)谙到y(tǒng)源碼里是放在/frameworks/base/core/res/res/drawable-large-nodpi和drawable-xlarge-nodpi下的default_wallpaper.jpg,
31.6589項(xiàng)目如何關(guān)閉NavigationBar:
默認(rèn)NavigationBar的控制在alps/frameworks/base/core/res/res/values/config.xml
<boolname=“config_showNavigationBar”>true</bool>
//6589MTKDemoProjectNavigationBarResourceOverlayNavigationBarresourceoverlay:
6589navigationBar最終控制在,會(huì)覆蓋掉上述設(shè)置:
alps/mediatek/custom/project_name/resource_overlay/generic/frameworks/base/core/res/res/values/config.xml
<boolname=“config_showNavigationBar”>true</bool>
32..9.png圖片制作
java的jdk、android的sdk中tools目錄下的draw9patch.bat
33.如何去掉狀態(tài)欄和標(biāo)題欄
修改對(duì)應(yīng)的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()方法之前,否則將提示錯(cuò)誤。
34.如何在狀態(tài)欄上增加一個(gè)icon、如何調(diào)整狀態(tài)欄icon之間的顯示順序:
具體查看:MTK_on_line_FAQ_SW_ALPS_20130123.pdf
35.在任意非鎖屏界面,按某個(gè)預(yù)設(shè)定好的按鍵進(jìn)入某個(gè)Activity的功能
PhoneWindowManager.java:interceptKeyBeforeDispatching()----按鍵響應(yīng)統(tǒng)一處理接口
具體查看: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/EngineerMode/AndroidManifest.xml
<receiverandroid:name=".EngineerModeReceiver">
<intent-filter>
<actionandroid:name="android.provider.Telephony.SECRET_CODE"/>
<dataandroid:scheme="android_secret_code"android:host="3646633"/>
</intent-filter>
</receiver>
37.觸屏的震動(dòng)響應(yīng)接口
調(diào)用native方法來(lái)開(kāi)啟和關(guān)閉vibrator:
nativestaticvoidvibratorOn(longmilliseconds);
nativestaticvoidvibratorOff();
調(diào)用方法如下: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,用來(lái)讀和修改modem的nvram數(shù)據(jù)。
另一種是SP_META,用來(lái)讀和修改androidapp端的nvram數(shù)據(jù)。
Nvram數(shù)據(jù)讀取方式:
首先,選擇這正確的tool;
然后通過(guò)usb把電腦和手機(jī)連起來(lái),再點(diǎn)擊optionmenu中的connecttosmartphone,
開(kāi)機(jī),手機(jī)會(huì)進(jìn)入metamode;
最后選擇nvrameditor,來(lái)選擇正確的database。
39.如何抓取mobilelog
具體查看:MTK_on_line_FAQ_SW_ALPS_20130123.pdf
40.如何編譯單雙卡版本
具體查看:MTK_on_line_FAQ_SW_ALPS_20130123.pdf
41.如何遠(yuǎn)端調(diào)試framework
1.請(qǐng)?jiān)趀clipse中新建一個(gè)java工程,導(dǎo)入framework的代碼(導(dǎo)入的framework代碼需要和手機(jī)的代碼版本一致)
2.請(qǐng)?jiān)赿dms界面查看system_process對(duì)應(yīng)的TCP端口
3.請(qǐng)?jiān)趓un/DebugConfiguration...菜單彈出的對(duì)話框添加一個(gè)RemoteJavaApplication,選擇第一步新建的project,使用第二步得到的端口號(hào)
4.請(qǐng)?jiān)谛枰{(diào)試的地方設(shè)置斷點(diǎn),然后調(diào)試
42.如何確認(rèn)一個(gè)應(yīng)用程序的安裝位置
android:installLocation="internalOnly"
android:installLocation="auto"
android:installLocation="preferExternal">
具體查看:MTK_on_line_FAQ_SW_ALPS_20130123.pdf
43.如何在activity中控制屏幕點(diǎn)亮與關(guān)閉
Android中通過(guò)各種Lock鎖對(duì)電源進(jìn)行控制,需要注意的是加鎖和解鎖必須成對(duì)出現(xiàn)。
//啟用屏幕常亮功能
PowerManagerpm=(PowerManager)getSystemService(POWER_SERVICE);
wakeLock=pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP,myPowerManager.TAG);
wakeLock.acquire();
//關(guān)閉屏幕常亮功能
if(wakeLock!=null){wakeLock.release();}
44.如何安裝/卸載APK
DDMS工具/ADB命令/FileManager文件夾中點(diǎn)擊安裝
相關(guān)文章
優(yōu)化和瘦身Android APK的六個(gè)小技巧
Android應(yīng)用的大小對(duì)用戶體驗(yàn)和應(yīng)用性能至關(guān)重要,大型APK文件會(huì)增加應(yīng)用的安裝時(shí)間,啟動(dòng)時(shí)間和頁(yè)面加載時(shí)間,降低了用戶體驗(yàn),因此,APK瘦身是Android開(kāi)發(fā)中的重要任務(wù),在本文中,我們將分享6個(gè)小技巧,幫助你優(yōu)化和瘦身Android應(yīng)用,需要的朋友可以參考下2023-11-11Android UI組件LinearLayout線性布局詳解
這篇文章主要為大家詳細(xì)介紹了AndroidUI組件LinearLayout線性布局,具有一定的實(shí)用性,感興趣的小伙伴們可以參考一下2016-08-08Android菜單操作之創(chuàng)建并響應(yīng)菜單
這篇文章主要介紹了Android菜單操作之創(chuàng)建并響應(yīng)菜單的相關(guān)資料,如何使用代碼創(chuàng)建菜單項(xiàng),給菜單項(xiàng)分組,及各種響應(yīng)菜單事件的方法,需要的朋友可以參考下2016-04-04Android實(shí)現(xiàn)視頻播放--騰訊瀏覽服務(wù)(TBS)功能
TBS視頻播放器可以支持市面上幾乎所有的視頻格式,包括mp4, flv, avi, 3gp, webm, ts, ogv, m3u8, asf, wmv, rm, rmvb, mov, mkv等18種視頻格式。這篇文章主要介紹了Android實(shí)現(xiàn)視頻播放--騰訊瀏覽服務(wù)(TBS),需要的朋友可以參考下2018-07-07Jetpack Compose按鈕組件使用實(shí)例詳細(xì)講解
這篇文章主要介紹了Jetpack Compose按鈕組件使用實(shí)例,按鈕組件Button是用戶和系統(tǒng)交互的重要組件之一,它按照Material Design風(fēng)格實(shí)現(xiàn),我們先看下Button的參數(shù)列表,通過(guò)參數(shù)列表了解下Button的整體功能2023-04-04基于Android設(shè)計(jì)模式之--SDK源碼之策略模式的詳解
本篇文章介紹了,基于Android設(shè)計(jì)模式之--SDK源碼之策略模式的詳解。需要的朋友參考下2013-04-04Android實(shí)現(xiàn)微信側(cè)滑關(guān)閉頁(yè)面效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)微信側(cè)滑關(guān)閉頁(yè)面效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Android組件必學(xué)之TabHost使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android組件中的TabHost組件使用方法,如何利用TabHost定義Tab標(biāo)簽樣式,感興趣的小伙伴們可以參考一下2016-05-05