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写自己的项目名称,一般就是你新建的文件夹名称):

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := HelloAndroid
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

猜你喜欢

转载自blog.csdn.net/ithouse/article/details/80025626