在做定制化ROM的同学一定有这样的经历:公司要求在定制化ROM里加入一些预装应用,主要有两种:①公司开发的项目,有源码;②其他应用,只有apk安装包。
一、有源码的。
【源码根目录/packages/apps/】下(或者【packages/experimental/】下,这个目录放一些实验性质的应用)新建一个文件夹,重命名为项目名称HelloAndroid,并把项目源码放进去,同时新建一个Android.mk文件,目录结构大致如下:

---AndroidMenifest.xml
---Android.mk
---src
------com/itant/test
---------HelloAndroid.java
---res
------layout
---------main.xml
------values
---------strings.xml
------drawable
---------icon.png

Android.mk文件内容如下(LOCAL_PACKAGE_NAME写自己的项目名称,一般就是你新建的文件夹名称):

# Android.mk通常需要定义好LOCAL_PATH,表示当前工作路径,函数my-dir是编译系统提供的,返回当前路径
LOCAL_PATH := $(call my-dir)
# 这一步操作主要是清空之前定义的LOCAL_XXX开头的变量,是必须要的操作。CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx,例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH.
# 这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
# 定义编译模块所需的源文件
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := HelloAndroid
# 定义编译出来的目标文件,如动态库,静态库,jar包以及apk
include $(BUILD_PREBUILT)

接下来执行"只有apk安装包的步骤3",添加项目文件夹名称到core.mk文件中
然后编译即可,具体编译流程可以参考我另一篇文章安卓5.0源码编译及烧录到真机

二、只有APK文件,假设为HelloAndroid.apk
1.同样是在【源码根目录/packages/apps/】新建文件夹HelloAndroid,拷贝HelloAndroid.apk进去。
2.新建Android.mk文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := HelloAndroid
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_SRC_FILES := HelloAndroid.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

3.在【源码根目录/build/target/product/core.mk】文件添加刚才添加的项目文件夹名称

#
# Copyright (C) 2007 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
## Base configuration for communication-oriented android devices
# (phones, tablets, etc.).  If you want a change to apply to ALL
# devices (including non-phones and non-tablets), modify
# core_minimal.mk instead.PRODUCT_PACKAGES += \HelloAndroid \BasicDreams \Browser \Calculator \Calendar \CalendarProvider \CaptivePortalLogin \CertInstaller \Contacts \DeskClock \DocumentsUI \DownloadProviderUi \Email \Exchange2 \ExternalStorageProvider \FusedLocation \InputDevices \KeyChain \Keyguard \LatinIME \Launcher2 \ManagedProvisioning \PicoTts \PacProcessor \libpac \PrintSpooler \ProxyHandler \QuickSearchBox \Settings \SharedStorageBackup \Telecom \TeleService \VpnDialogs \MmsService$(call inherit-product, $(SRC_TARGET_DIR)/product/core_base.mk)

4.编译源码即可

参考以下
https://stackoverflow.com/questions/10579827/how-do-i-add-apks-in-an-aosp-build
https://groups.google.com/forum/#!topic/android-building/i4oaJ2DtadM
https://stackoverflow.com/questions/12643465/include-app-in-rom-as-system-app

如果你没有ROM的源码,那么可以试试XDA论坛大神的工具APK Swapper,可以从打包好的ROM中剔除不想要的预装软件,以及加入自己需要的第三方软件。
https://stackoverflow.com/questions/30865870/install-an-app-as-a-system-app-programmatically/30872375#30872375

Android ROM中加入第三方APP相关推荐

  1. Android Studio中导入第三方库

    之前开发Android都是使用的eclipse,近期因为和外国朋友Timothy一起开发一款应用,他是从WP平台刚切换使用Android的,使用的开发环境时Android Studio,为了便于项目的 ...

  2. H5 -- 微信h5页面中下载第三方app的方法

    需求:在微信h5页面中下载第三方app -- 安卓, 直接下载apk文件包:iphone,跳转AppStore 分析:微信不支持,在微信中屏蔽了apk文件的下载以及AppStore的跳转(且除非和TX ...

  3. 关于如何正确地在android项目中添加第三方jar包

                  在android项目中添加第三方jar包虽然不是一个很复杂的问题,但是确实给很多开发者带来了不小的困扰.我自己就曾经碰到过calss not found exception ...

  4. android 安装第三方app,Android识别预装的第三方App方法实例

    前言 新买一台手机,里面会有很多App,有的属于系统App,不可卸载,有的属于第三方App,厂商会预装一些常用的或者给了他们广告费的App,这些是可以卸载的. 如果要详细划分,系统App还可根据其路径 ...

  5. 需求:在微信h5页面中下载第三方app —— 安卓, 直接下载apk文件包;iphone,跳转AppStore

    分析:微信不支持,在微信中屏蔽了apk文件的下载以及AppStore的跳转(且除非和TX有合作的应用,否则也不支持通过scheme跳转第三方app) 点击查看案例地址 变通方法: 一.借助TX的应用市 ...

  6. android 模拟点击第三方app,Android实现打开第三方app

    前言 在android开发过程中,我们有时会涉及到在本应用中打开第三方应用的需求,那么这里我封装了一个工具类--AppHelper,用于实现获取本设备中app安装列表及在本应用中打开第三方应用的功能, ...

  7. android odex 作用,Android ROM中Odex文件的作用及介绍

    细心的网友可能发现Android的ROM中有很多odex文件,相对于 APK中的dex文件而言这个odex有什么作用呢? Android123提示大家,如果你仔细观察会发现文件名时一一对应的,同时那些 ...

  8. android 工程中引入第三方JAR包后安装APK时老是提示找不到库文件?

    网上查都说是通过添加中Build Path或者使用User library来添加,我不知道这些复杂粘贴的人测试过没,反正我测试了好久都不行,估计是我RP不行,这样添加到后编译会通过,但运行的时候就会提 ...

  9. Xamarin Android Webview中JS调用App中的C#方法

    参考链接:https://github.com/xamarin/recipes/tree/master/Recipes/android/controls/webview/call_csharp_fro ...

最新文章

  1. 隔年增长的题_行测资料分析:一起聊聊隔年增长
  2. spring mvc dubbo ios android整合cms内容发布平台
  3. 这月跳槽的多吗?月薪多少才正常
  4. 英语学习过程中的几点体会(2)
  5. 10大淘宝直播之城公布:杭州、广州、连云港位列前三
  6. android学习笔记---49_屏幕适配,根据不同手机屏幕大小适配软件界面
  7. jquery根据身份证号码计算出生日期、年龄、性别代码
  8. android系统打印功能实现,Android实现系统打印功能
  9. SMS2003 推送软件包中的日志查看及安装错误代号1633分析
  10. Markdown 语法速查表
  11. sama5做linux的sd卡启动u盘,windows中service.msc与regedit
  12. IT计算机实习:JAVA实习报告范文(二)
  13. c#怎样将object转换过程int型
  14. nginx负载接口与宕机切换
  15. 软件测试中报表测试用例设计方法总结
  16. androidkiller
  17. Android APP头像的图标与背景的设置
  18. TypeScript值比较、泛型函数类型和签名
  19. serializers.serialize
  20. PHP intval() 和 (int) 转换的区别

热门文章

  1. aj1黑白反转价格_除了倒勾配色AJ1,更有反转配色WHITE MOCHA同步发售
  2. 爬虫学习经验分享-------某点评网站
  3. python import seaborn as sns 显示中文问题
  4. 鸡啄米VS2010/MFC编程入门教程——学习1初次接触
  5. Linux之代理服务器squid安装和使用
  6. TabLayout——浅谈
  7. nvl2与nvl使用区别
  8. go 字符串分割数组
  9. OpenCV-Python 级联分类器训练 | 六十三
  10. Collection和List,Set,Map的关系与说明