Android ROM中加入第三方APP

在做定制化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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ithouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值