自定义程序 第三方apk 编译进Android方法

来源:互联网 发布:arm linux 开发板 编辑:程序博客网 时间:2024/05/16 00:40

       Android的编译系统详细的讲解见《Android内核剖析》柯元旦 第18章

       自己试着按照书上和网上的方法编译,不知道为什么就老是出问题。不知道是不是因为系统版本的原因,网上许多教程都有问题,断断续续弄了两天终于弄完了。

       一,自定义程序

       有源码那种==,可以完全模仿系统内置的程序,如Calender,等,这里我的项目名字是HelloAndroid。

1,理论上,源码放置的位置没什么关系。我是放在packages/app里面,

在项目根目录下新建Android.mk 内容可以从Calender里面的Android.mk直接复制 然后修改下

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


LOCAL_MODULE_TAGS := optional


LOCAL_SRC_FILES := $(call all-java-files-under,src)


# TODO: Remove dependency of application on the test runner (android.test.runner)
# library.
LOCAL_JAVA_LIBRARIES := android.test.runner


LOCAL_STATIC_JAVA_LIBRARIES += android-common


LOCAL_PACKAGE_NAME := HelloAndroid


include $(BUILD_PACKAGE)


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


具体修改了 LOCAL_PACKAGE_NAME := HelloAndroid  即改为应用的名字,其他命令的具体含义可以参见我推荐的那本书。

2,修改跟目录/build/target/product/下的generic.mk文件添加上你的应用名字如下:

PRODUCT_PACKAGES := \
    AccountAndSyncSettings \
    DeskClock \
    AlarmProvider \
    Bluetooth \
    Calculator \
    Calendar \
    Camera \
    CertInstaller \
    DrmProvider \
    Email \
    Gallery3D \
    LatinIME \
    Launcher2 \
    Mms \
    Music \
    Provision \
    Protips \
    QuickSearchBox \
    Settings \
    Sync \
    SystemUI \
    Updater \
    CalendarProvider \
    SyncProvider \
    HelloAndroid \

然后就可以了~,由于make机制的原因又是需要修改下原来的文件 才会重新make, 不过最保险的做法,还是重新make clean 然后再make......

二,把第三方apk编译进android系统

这个可能做ROM的会比较熟悉一点。。。下面推荐我认为最简单的方法==

使用yaffs2 

yaffs2包含了两个工具 mkyaffs2image和mkyaffsimage 也就是可以直接把一个文件夹生成system.img的工具

1,yaffs2安装方法:

apt安装 git

新建一个文件夹 yaffs2 进入到该文件夹下执行git clone git://www.aleph1.co.uk/yaffs2 完成后进入yaffs2 直接make就行了。

2,生成system.img

 进入编译好的Android系统目录 /out/target/product/generic 把你的apk放入当前目录下的/system/app目录下 ,如果该apk中有其他依赖的库 可以解压apk,将其中的lib/ .so文件copy到/system/lib下

然后在/out/target/product/generic 下执行

mkyaffs2image -f system system.img

也就是把当前的system打包成system.img

emulator -system system.img -data userdata.img -ramdisk ramdisk.img 指定下运行的系统为加载刚刚的system.img就可以了。



原创粉丝点击