天天看点

Android系统应用导入Eclipse中开发Android系统应用导入Eclipse中开发

Android系统应用导入Eclipse中开发

最近开发中需要将android的一些自带的系统级应用导入eclipse中,但是系统级的apk导入eclipse中会发现很多错误,下面我就介绍下我是如何成功导入的过程和一些应该注意的细节

1.我用的android sdk的target-19 4.4的版本 ,而使用的android源代码也是android4.4.2 ,这个最好能保持相同,实在不行也最好是sdk的版本高于源码的版本,这样可以减少eclipse中代码的错误数量,不会那么打击新程序员的信心。下面我以一个实例具体讲述。Dialer 是android系统中打电话拨号的应用。首先你在系统的新建一个android工程,但在新建过程中要注意新建的包名要和源码中Dialer AndroidManifest.xml文件中定义的包名一致,这样可以避免很多错误,工程建好之后,把源码Dialer中的AndroidManifest.xml ,res目录下 ,src目录的 ,的文件全部替换eclipse中对应的文件或相同目录下的文件,这时你会发现有很多错误。

2.有错误没关系,这时我们需要去看一个源码中比较关键的一个文件Android.mk ,源码编译系统的所有的apk都是根据这个文件的编译的,先让我们来看看Dialer中的这个文件

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

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

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
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 \

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))
           

导入eclipse中的源代码可能有些是资源文件中某某资源找不到或者代码中的类没有,这没事。看上面的编译脚本,LOCAL_SRC_FILES指定编译代码的路径,LOCAL_RESOURCE_DIR制定所需资源的路径,

代码路径:

src_dirs := src $(contacts_common_dir)/src $(incallui_dir)/src  
           

资源路径:

res_dirs := res $(contacts_common_dir)/res $(incallui_dir)/res