mtk编译技巧

第七课、mtk编译技巧

2014-08-23 
分类:

版权声明:本文为博主原创文章,未经博主允许不得转载。

第七课、mtk编译技巧

一、Android源代码编译过程

二、编译命令汇总

   一)./makeMtk   -o=TARGET_BUILD_VARIANT=user   sagetel82_wet_kk new 编译整个工程

   二)、./makeMtk   -o=TARGET_BUILD_VARIANT=user   sagetel82_wet_kk r 重新编译Android相关的东西

   三)、./makeMtk   -o=TARGET_BUILD_VARIANT=user   sagetel82_wet_kk r dr只编译android的东西

   四)、./makeMtk   -o=TARGET_BUILD_VARIANT=user   sagetel82_wet_kk snod 将Android   APK文件重新打包成system.img

   五)、单独编译push对应的文件(apk、lib库文件、资源文件)

1、 ./makeMtk   -o=TARGET_BUILD_VARIANT=user   sagetel82_wet_kk mmmediatek/factory 编译修改的模块

2、 adb pushout\target\product\mt6572tdv1_phone\system\bin\factory

3、

 1)如果是重新快关机需要使用adb remount (这是一个重新mount你的分区的命令

 让system分区从只读变成可读可写 获得了root权限才可运行);

2)MTK平台root命令:*#*#3646633#*#*(如果是user版本)

4、如果修改的是布局文件或是图片等资源文件的话,需要动一下AndroidManifest.xml文件,将修改编译进去;

六)、编译ota压缩包用于T卡升级

./makeMtk   -o=TARGET_BUILD_VARIANT=user   sagetel82_wet_kk otapackage

七)、列出源代码中可用的工程

./mk listp

八)、更新系统 api

./mk update-api

 九)、 当修改一些代码时,使用什么编译命令可以最有效率

1: ./mk n(r)kernel; ./mk bootimage;当修改kernel相关代码时,要使用此命令,具体如下:

    alps/kernel/

    alps/mediatek/platform/mt65xx/kernel/

    alps/mediatek/source/kernel/

    alps/mediatek/customer/mt65xx/kernel/

    alps/mediatek/customer/common/kernel/

    alps/mediatek/customer/$porject_name$/kernel

    ......

2: ./mk n pl 当修改preloader相关代码时,要使用此命令,具体如下:

    alps/mediatek/platform/mt65xx/preloader/

    alps/mediatek/source/preloader/

    alps/mediatek/customer/mt65xx/preloader/

    alps/mediatek/customer/common/preloader/

    alps/mediatek/customer/$porject_name$/kernle

    ......

3: ./mkuboot  当修改uboot相关代码时,要使用此命令,具体如下:

    alps/mediatek/platform/mt65xx/uboot/

    alps/mediatek/source/uboot/

    alps/bootable/bootloader/uboot/

    alps/mediatek/customer/mt65xx/uboot/

    alps/mediatek/customer/common/buoot/

    alps/mediatek/customer/$porject_name$/uboot/

     ......

4: ./mksystemimage 当修改system相关代码时使用此命令,具体如下:

     alps/frameworks/

     alps/packages/

     alps/vendor/

     alps/hardware/

     alps/dalvik/

     ...........

5: ./mkrecoverimage  当修改recover相关代码时使用此命令,具体如下:

     alps/bootable/recovery/

     alps/mediatek/customer/$project_name$/recovery/

     ......

6: ./mkfactoryimage:  当修改factory相关代码时使用此命令,具体如下:

     alps/mediatek/customer/$project_name$/factory/

     alps/mediatek/customer/common/factory/

     alps/mediatek/source/factory/

     ......

7: ./mksecroimage  当修改secro相关代码时使用此命令,具体如下:

     alps/mediatek/source/secro/

     alps/mediatek/customer/$project_name$/secro/

    .....

三、Android.mk文件解析

       Android.mk文件用来告知NDK Build 系统关于Source的信息。 Android.mk将是GNU Makefile的一部分,且将被BuildSystem解析一次或多次。

       Android.mk其实是把真正的Makefile包装起来,使用它来编译程序时,不管是动态库、可执行的二进制文件,还是Jar库、APK包,只要沿着一个简单的思路来做三大步就可以了:清除旧变量,设置新变量,调用编译函数。

拿AlarmClock来做例子的话:

//清除旧变量

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

//设置新变量

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_PACKAGE_NAME := AlarmClock

//调用编译函数

include $(BUILD_PACKAGE)

下面简单解释一下这三步:

1)、清除旧变量,是因为Android.mk中所有的变量都是全局的,编译函数在编译时会调用这些变量。为了防止编译函数使用了编译其它模块时设置的变量,每次开始编译一个新的模块时清除所有的变量是个好习惯。

2)、设置新变量就是把本次编译时用到的源码地址,包名等设置好。

3)、调用编译函数其实就是include一个固定的mk文件,这个mk文件会根据设置的变量提取出编译模块需要的target,Command等信息并执行固定的编译命令。

2. NDK Build System变量:

NDK Build System 保留以下变量名:

以LOCAL_  为开头的

以PRIVATE_ ,NDK_ 或者APP_ 开头的名字。

小写字母名字:如my-dir

如果想要定义自己在Android.mk中使用的变量名,建议添加MY_ 前缀。

  1. # 1、LOCAL_PATH必须位于Android.mk文件的最开始。它是用来定位源文件的位置,$(call my-dir),宏my-dir 则由Build System提供。返回包含Android.mk的目录路径。的作用就是返回当前目录的路径。  
  2. LOCAL_PATH:= $(call my-dir)  
  3. # 2、include $(CLEAR_VARS)的作用是清除一些变量的值,例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但是LOCAL_PATH除外。这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。  
  4. include $(CLEAR_VARS)  
  5. # 3、LOCAL_MODULE是用来指定当前待编译模块的名称,在示例中的模块名称为optional,名字必须唯一且不包含空格。  
  6. Build System会自动添加适当的前缀和后缀。例如,foo,要产生动态库,则生成libfoo.so. 但请注意:如果模块名被定为:libfoo.则生成libfoo.so. 不再加前缀。  
  7. LOCAL_MODULE_TAGS := optional  
  8. contacts_common_dir := ../ContactsCommon  
  9. incallui_dir := ../InCallUI  
  10. src_dirs := src $(contacts_common_dir)/src $(incallui_dir)/src  
  11. res_dirs := res $(contacts_common_dir)/res $(incallui_dir)/res  
  12. # 4、LOCAL_SRC_FILES是用来指定参与编译的源代码文件。  
  13. LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))  
  14. LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))  
  15. LOCAL_AAPT_FLAGS := \  
  16.     --auto-add-overlay \  
  17.     --extra-packages com.android.contacts.common \  
  18.     --extra-packages com.android.incallui  
  19. LOCAL_JAVA_LIBRARIES := telephony-common voip-common  
  20. LOCAL_STATIC_JAVA_LIBRARIES := \  
  21.     com.android.phone.shared \  
  22.     com.android.services.telephony.common \  
  23.     com.android.vcard \  
  24.     android-common \  
  25.     guava \  
  26.     android-support-v13 \  
  27.     android-support-v4 \  
  28.     android-ex-variablespeed \  
  29.     com.mediatek.contacts.ext \  
  30.     com.mediatek.incallui.ext  
  31. LOCAL_JAVA_LIBRARIES += mediatek-framework  
  32. LOCAL_JAVA_LIBRARIES += mediatek-common  
  33. LOCAL_REQUIRED_MODULES := libvariablespeed  
  34. LOCAL_PACKAGE_NAME := Dialer  
  35. LOCAL_CERTIFICATE := shared  
  36. LOCAL_PRIVILEGED_MODULE := true  
  37. LOCAL_PROGUARD_FLAG_FILES := proguard.flags $(incallui_dir)/proguard.flags  
  38. include $(BUILD_PACKAGE)  
  39. # Use the following include to make our test apk.  
  40. include $(call all-makefiles-under,$(LOCAL_PATH))  
# 1、LOCAL_PATH必须位于Android.mk文件的最开始。它是用来定位源文件的位置,$(call my-dir),宏my-dir 则由Build System提供。返回包含Android.mk的目录路径。的作用就是返回当前目录的路径。
LOCAL_PATH:= $(call my-dir)
# 2、include $(CLEAR_VARS)的作用是清除一些变量的值,例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但是LOCAL_PATH除外。这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。
include $(CLEAR_VARS)
# 3、LOCAL_MODULE是用来指定当前待编译模块的名称,在示例中的模块名称为optional,名字必须唯一且不包含空格。
Build System会自动添加适当的前缀和后缀。例如,foo,要产生动态库,则生成libfoo.so. 但请注意:如果模块名被定为:libfoo.则生成libfoo.so. 不再加前缀。
LOCAL_MODULE_TAGS := optional

contacts_common_dir := ../ContactsCommon
incallui_dir := ../InCallUI

src_dirs := src $(contacts_common_dir)/src $(incallui_dir)/src
res_dirs := res $(contacts_common_dir)/res $(incallui_dir)/res
# 4、LOCAL_SRC_FILES是用来指定参与编译的源代码文件。
LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))

LOCAL_AAPT_FLAGS := \
    --auto-add-overlay \
    --extra-packages com.android.contacts.common \
    --extra-packages com.android.incallui

LOCAL_JAVA_LIBRARIES := telephony-common voip-common
LOCAL_STATIC_JAVA_LIBRARIES := \
    com.android.phone.shared \
    com.android.services.telephony.common \
    com.android.vcard \
    android-common \
    guava \
    android-support-v13 \
    android-support-v4 \
    android-ex-variablespeed \
    com.mediatek.contacts.ext \
    com.mediatek.incallui.ext

LOCAL_JAVA_LIBRARIES += mediatek-framework
LOCAL_JAVA_LIBRARIES += mediatek-common

LOCAL_REQUIRED_MODULES := libvariablespeed

LOCAL_PACKAGE_NAME := Dialer
LOCAL_CERTIFICATE := shared
LOCAL_PRIVILEGED_MODULE := true

LOCAL_PROGUARD_FLAG_FILES := proguard.flags $(incallui_dir)/proguard.flags

include $(BUILD_PACKAGE)

# Use the following include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值