android 系统开发入门(二) mm 单独模块编译调试说明

1.单独编译完成后会在out\target\product\平台名称\下生成相应的文件,此目录下的文件对应机器内的相应路径,如果是apk的调试,则一般通过mm之后会在system\app或者system\priv-app下生成相应的目录下生成新的apk文件
1)system\app为系统常用的apk的目录,system\priv-app为系统核心应用如launcher,setting,systemui等
2)有的平台编译会生成apk和odex两个文件,实际是由于在系统编译的脚本的地方加了odex配置,作用是开机过程中解析apk快点,加快开机速度,实际此种情况apk会是空壳,真正起作用的是odex文件,常规情况下可以看到apk只有几KB,而odex文件会有几M,如果有apk和odex生成的需要将相应的两个文件都push到机器里面去替换,通常执行mm之后都会有提示install之类的字段,告诉你最终是在哪个目录下生成的新的文件
out\target\product\平台名\system\priv-app\Settings\Settings.apk 编译packages\apps\Settings

out\target\product\平台名\system\priv-app\SystemUI\SystemUI.apk 编译frameworks/base/packages/SystemUI
out\target\product\平台名\system\priv-app\SystemUI\oat\arm\SystemUI.odex

out\target\product\平台名\system\framework\services.jar 编译framework/base/service
out\target\product\平台名\system\framework\oat\arm\services.odex

out\target\product\平台名\system\framework\framework-res.apk 编译framework/base/core/res

out\target\product\平台名\system\framework\framework.jar 编译framework/base
out\target\product\平台名\system\framework\arm\boot.oat
out\target\product\平台名\system\framework\arm\boot.art
2.实际通过adb替换步骤如下,前期没把握的时候可以自己加个自己的log,然后验证自己push有没有替换成功
adb root
adb remount 
adb push out\target\product\平台名\system\priv-app\Settings\Settings.apk system/priv-app/Settings 
adb reboot
3.常见编译无源码apk的mk文件说明
LOCAL_PATH:= $(call my-dir)  
用于确定源码所在的目录,最好把它放在CLEAR_VARS变量引用的前面,因为它不会被清除,每个Android.mk只需要定义
一次即可,表示LOCAL_PATH的值为当前路径的值,用于返回当前路径
include $(CLEAR_VARS)   
它清空了很多以LOCAL_开头的变量(LOCAL_PATH除外)。由于所有的MakeFile都是在一个编译环境下执行的,因此
变量的定义理论上是全局的,在每个模块编译开始前进行清理工作是必要的。表示清空所有LOCAL_xxx的变量,不影响后面这些变量的使用
LOCAL_MODULE_TAGS := optional  表示该模块在所有版本下都编译
LOCAL_SRC_FILES := $(call all-subdir-java-files)   表示编译的源代码文件列表,添加所有的java 源文件
LOCAL_PACKAGE_NAME := jnisample   表示生成的apk的名称,即此例为jnisample.apk
LOCAL_JNI_SHARED_LIBRARIES := libtest   表示生成的so文件的名称,此例即为libtest.so
LOCAL_CERTIFICATE := platform 表示使应用获得系统权限,即可以在源码环境下编译类似于sharedUserId="android.uid.system"
LOCAL_DEX_PREOPT := false  直接打包生成.apk 不会附带生成.odex文件了 
include $(BUILD_PACKAGE)    每个编译模块都是以include $(CLEAR_VARS)开始,以include $(BUILD_XXX)结束
include $(LOCAL_PATH)/jni/Android.mk   表示编译工程文件下面的jni/Android.mk文件
include $(call all-makefiles-under,$(LOCAL_PATH))   表示编译工程内的所有mk文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章