Android:源码环境下移植第三方的apk内置到ROM(System Image)中

来源:互联网 发布:html5仿微信红包源码 编辑:程序博客网 时间:2024/04/26 15:05

1. 首先在vendor目录下新建一个the3rdapk的目录,将需要内置的apk丢进去,目录名自己随意定。

2. 在 build/target/product/common.mk最后面,在$(call inherit-product, $(SRC_TARGET_DIR)/product/core.mk) 之前加入你的apk

第一部分是是本地apk的路径,/system/app/表示复制到system image的相关目录。

如果没有第二部分,则会出现以下编译错误:

build/core/product_config.mk:227: *** build/target/product/full.mk: malformed COPY_FILE "vendor/the3rdapk/FeiLiao_Android_1.6.1.apk".  Stop.

[html] view plaincopy
  1. #andy@2012.9.19,基于源代码方式内置 salemanager   
  2. PRODUCT_PACKAGES += SaleManager  
  3.   
  4. #andy@2012.9.19,直接内置第三方apk,add for vendor apks  
  5. PRODUCT_COPY_FILES +=vendor/the3rdapk/FeiLiao_Android_1.6.1.apk:/system/app/FeiLiao_Android_1.6.1.apk\  
  6.     vendor/the3rdapk/Mcontact_android_1.1.1.apk:/system/app/Mcontact_android_1.1.1.apk\  
  7.     vendor/the3rdapk/MM_online_channel.apk:/system/app/MM_online_channel.apk\  
  8.     vendor/the3rdapk/fetion_android.apk:/system/app/fetion_android.apk  
  9.   
  10. $(call inherit-product, $(SRC_TARGET_DIR)/product/core.mk)  


3. 如果有.so文件,则相应的复制到 /system/lib/目录下,格式如上文。



申明:转载:http://blog.csdn.net/zhangchiytu/article/details/6424910

   对于Android系统集成有源码的第三方库和程序,只需要提供Android.mk文件,把源码集成到 Android编译系统中就可以了,并且有很多例子可以参考。但是对于没有源码的pre-build第三方库和程序,网上介绍的比较少,可以参考的例子也 不多。本文简单介绍一下集成pre-build库和程序时候,怎样编写Android.mk。

1、集成静态库

[xhtml:nogutter] view plaincopyprint?
  1. 1: LOCAL_PATH := $(call my-dir)  
  2. 2: include $(CLEAR_VARS)  
  3. 3:    
  4. 4: LOCAL_PREBUILT_LIBS :libA.a    /  
  5. 5:                        libB.a  
  6. 6:                           
  7. 7: LOCAL_STATIC_LIBRARIES :libA    /  
  8. 8:                         libB  
  9. 9:    
  10. 0: include $(BUILD_MULTI_PREBUILT)  

2、集成动态库

[c-sharp:nogutter] view plaincopyprint?
  1. 1: LOCAL_PATH := $(call my-dir)  
  2. 2: include $(CLEAR_VARS)  
  3. 3:    
  4. 4: LOCAL_PREBUILT_LIBS := libA.so  
  5. 5:                         libB.so  
  6. 6: include $(BUILD_MULTI_PREBUILT)  

3、集成可执行程序

[xhtml:nogutter] view plaincopyprint?
  1. 1: LOCAL_PATH := $(call my-dir)  
  2. 2: include $(CLEAR_VARS)  
  3. 3:    
  4. 4: LOCAL_SRC_FILES :hellovprc.elf   
  5. 5: LOCAL_MODULE :hellovprc.elf  
  6. 6: LOCAL_MODULE_CLASS :EXECUTABLES  
  7. 7: LOCAL_MODULE_TAGS :debug  
  8. 8: include $(BUILD_PREBUILT)  


4、集成pre-build Android应用程序(APK)

如何集成没有源码的apk文件,纯粹的apk呢?

方法一、目录结构vendor/BM/APPs/MobileQQ2011/MobileQQ2011.apk

            vendor/BM/APPs/MobileQQ2011/Android.mk

以下是Android.mk:

 

[xhtml:nogutter] view plaincopyprint?
  1.   LOCAL_PATH := $(call my-dir)  
  2.   include $(CLEAR_VARS)  
  3.      
  4.   # Module name should match apk name to be installed.  
  5.   LOCAL_MODULE :MobileQQ2011  
  6.   LOCAL_SRC_FILES := $(LOCAL_MODULE).apk  
  7.   LOCAL_MODULE_CLASS :APPS  
  8.   LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)  
  9.     
  10. #  LOCAL_MODULE_TAGS :user  
  11. #add by yue @20110516  
  12.   #you can choose apk's diff location   
  13.  # LOCAL_MODULE_PATH := $(TARGET_OUT_APPS)  
  14.    LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)  
  15.   LOCAL_CERTIFICATE :platform  
  16. #end  
  17.  include $(BUILD_PREBUILT)  

 

加进去后,在根目录下执行:make即可,

可以在installed-files.txt中查看是否加入到了对应的img文件中。

 弊端是如果加入很多apk,要逐个建立这样的目录结构,也因为有android.mk,会产生相应的临时文件

方法二、纯粹拷贝apk文件

目录结构vendor/BM/APPs/MobileQQ2011.apk

            vendor/BM/APPs/Renren_Android_3.0.2.apk

             。。。。。

通过android提供的PRODUCT_COPY_FILES这个变量来自动拷贝,只需要给此变量赋值。在任何一个确定加入编译的mk文件

中加入(我的是加在msm7627_qrd.mk)

PRODUCT_COPY_FILES += /

    vendor/bm/APPS/MobileQQ2011.apk:system/app/MobileQQ2011.apk/
    vendor/bm/APPS/Renren_Android_3.0.2.apk:system/app/Renren_Android_3.0.2.apk

这种相对不会很繁琐,不需要一级级的建立目录,在内置很多apk是比较方便。

 

附加说明:

关于android.mk中的LOCAL_OVERRIDES_PACKAGES需要说明一下,

此变量可以使其他的模块不加入编译,如源码中DeskClock的android.mk有

LOCAL_OVERRIDES_PACKAGES := AlarmClock

使 AlarmClock不会加入到编译系统中,不会生成 AlarmClock.apk。

原先我是死活不明白会什么有两个闹钟 AlarmClock和 DeskClock ,源码几乎相同,原先只在 AlarmClock中的文件中修改,就是没有效果,测试说没有修改,原来发布的版本中只有DeckClock.apk,我却在本地make AlarmClock编译出了AlarmClock.apk,>_<!!

试了一下在 DeskClock的android.mk中加入LOCAL_OVERRIDES_PACKAGES := Calendar,删掉 Calendar.apk,然后全部make一下,在system/app下calendar.apk竟然没再生成了????!!!

p.s

# Some packages may override others using LOCAL_OVERRIDES_PACKAGES.
# Filter out (do not install) any overridden packages.
overridden_packages := $(call get-package-overrides,$(modules_to_install))
ifdef overridden_packages
#  old_modules_to_install := $(modules_to_install)
  modules_to_install := /
      $(filter-out $(foreach p,$(overridden_packages),$(p) %/$(p).apk), /
          $(modules_to_install))
endif



要在界面安装相应的APK的快捷键首先得先预装相应的APK才行,其次在相应的xml文件中定义xy值制定其位置,这样就达到你的目的了、、、、、

一、在路径下packages/apps/Launcher2/res/xml/ default_workspace.xml 文件中有appwidget和favorite,你可以按需选择,填入APK的包(源码应该看的懂吧,照葫芦画瓢咯偷笑),这一步是写好你要预装的APK的包,然后定义好其显示在Luacher中的位置。


二、预装APK咯

a、把要预装的APK复制到路径out/target/product/crane-xh7/system/app下


b、把要预装的APK复制到路径 device/softwinner/系统/apk下面,然后写一个Android.mk文件,文件内容如下,你只需要把写apk的地方改成你要预装的apk的名字即可。

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

LOCAL_MODULE := you.apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/3rdapks
LOCAL_SRC_FILES := $(LOCAL_MODULE)

include $(BUILD_PREBUILT)

include $(CLEAR_VARS)

LOCAL_MODULE := you.apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/3rdapks
LOCAL_SRC_FILES := $(LOCAL_MODULE)

include $(BUILD_PREBUILT)

include $(CLEAR_VARS)

LOCAL_MODULE := you.apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/3rdapks
LOCAL_SRC_FILES := $(LOCAL_MODULE)

include $(BUILD_PREBUILT)

include $(CLEAR_VARS)

LOCAL_MODULE := you.apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/3rdapks
LOCAL_SRC_FILES := $(LOCAL_MODULE)

include $(BUILD_PREBUILT)

include $(CLEAR_VARS)

LOCAL_MODULE := you.apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/3rdapks
LOCAL_SRC_FILES := $(LOCAL_MODULE)

include $(BUILD_PREBUILT)



(随你APK的个数来定义文件)


c、在路径device/softwinner/系统/系统.mk文件中PRODUCT_PACKAGES += \下面写下要预装的APK,如下


PRODUCT_PACKAGES += \
   you.apk \
   you.apk \
    you.apk \
    Sogou.apk 



然后编译,APK预装完成
0 0
原创粉丝点击