Android内置应用到系统的方法总结

目录

Android内置应用到系统的方法总结 1

1. 前言 2

1.1系统安装应用位置分别为: 2

2.带有源码的第三方应用内置到系统 2

2.1 AndroidStudio工程 3

2.2 Eclipse工程 6

2.3项目中so库文件的处理方法 9

3. APK文件内置到系统 10

  1. 前言

目前Android集成第三方应用到系统可以分为两大类:带有源码和不带有源码。两种继承方式的最大区别是在于Android makefile的编写。所以下面将详细的介绍内置第三方应用到系统的方法。

1.1系统安装应用位置分别为:

/system/framework   用于存放资源型应用(系统框架)。

/system/app         用于存放系统应用,不能卸载。 

/system/priv-app   Android4.4+新增,系统【核心】应用存放路径。 /vendor/app         用于存放厂商应用,可以卸载,恢复出厂时恢复。

/data/app          用于存放用户应用,可以卸载,恢复出厂不能恢复。 /data/app-private   Android4.4+新增,受DRM保护的应用存放路径。 

APP 需要内置到不同的路径下可以在LOCAL_MODULE_PATH :=属性后加入你所需要安装的路径。

2.带有源码的第三方应用内置到系统

无论源码是Eclipse工程项目还是Androidstudio项目,两大工程最大的不同就是代码结构。使用系统的编译方式编译都需要编写系统编译的规则。

2.1 AndroidStudio工程

2.1.1 代码目录结构(AutoTimeZone)

2.1.2 Android makefile的编写(不可卸载应用)

从上面可看出这个mk和其他的mk的最大区别在于他指定了java文件的路径,资源文件和AndroidManifest的路径。其他的都和普通的Android makefile类似。以下是Android makefile。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)  (经典开头两句)

LOCAL_PACKAGE_NAME := xxx(apk的名字

LOCAL_CERTIFICATE := platform (系统签名)

LOCAL_MANIFEST_FILE := app/src/main/AndroidManifest.xml (指定AndroidManifest的路径)

LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/app/src/main/res \ (指定资源的路径)

  frameworks/support/v7/appcompat/res

LOCAL_SRC_FILES := $(call all-java-files-under,app/src/main/java)(指定java文件路径)

LOCAL_PREGUARD_ENABLED :=disabled(取消打包时的混淆)

LOCAL_MODULE_PATH :=$(TARGET_OUT_DATA_APPS) (app安装的路径)

LOCAL_STATIC_JAVA_LIBRARIES += libBaiduLBS_Android \ (使用的jar包声明)

   libMyApi \

   android-support-v7-appcompat \

   android-support-v4 \

LOCAL_AAPT_FLAGS := \

      --auto-add-overlay \     

      --extra-packages android.support.v7.appcompat

include $(BUILD_PACKAGE)

include $(CLEAR_VARS) (使用的jar包路径声明)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \

    libBaiduLBS_Android:app/libs/BaiduLBS_Android.jar \

libMyApi:app/libs/myApi.jar

include $(BUILD_MULTI_PREBUILT)

# Use the following include to make our test apk.

include $(call all-makefiles-under,$(LOCAL_PATH))

:如应用不是系统应用 则可以把LOCAL_CERTIFICATE选项去除,但是应用安装的目录还是在/system/app/下。

2.1.3 增加新的模块

(1)base.mk文件路径在/devices/qcom/common/下。

在base.mk中的PREODUCT_PACKAGE 选项后加入RokidTimeZone。

PRODUCT_PACKAGE+=RokidTimeZone

(2)如果该应用有已使用的so库文件,需要copy so库文件到该应用的安装文件夹下的lib中。

msmxxx.mk文件在devices/qcom/msmxxx/文件夹下。

加入:

PRODUCT_COPY_FILES+= vendor/ts/AutoTimeZone/app/libs/arm64-v8a/liblocSDK7b.so:system/lib64/liblocSDK7b.so

PRODUCT_COPY_FILES+= vendor/ts/AutoTimeZone/app/libs/armeabi/liblocSDK7b.so:system/lib/liblocSDK7b.so(AutotimeZone使用的so库文件)

2.2 Eclipse工程

2.2.1代码目录结构(Calculator)

2.2.2 Android makefile的编写

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_STATIC_JAVA_LIBRARIES := libarity android-support-v4 guava (声明工程使用的jar包)

LOCAL_SRC_FILES := $(call all-java-files-under, src) (指定java文件路径)

LOCAL_SDK_VERSION := current

LOCAL_PACKAGE_NAME := Calculator (声明应用名称)

include $(BUILD_PACKAGE)

##################################################

include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libarity:arity-2.1.2.jar (预编译libarity)

include $(BUILD_MULTI_PREBUILT)

# Use the following include to make our test apk.

include $(call all-makefiles-under,$(LOCAL_PATH))

2.2.3 增加新模块

(1)在devices/qcom/common/base.mk中的 PRODUCT_PACKAGE中加入新的模块

(2)如在项目中使用到so库文件则可以参考2.1.3节中的内容,对so文件进行copy即可。

2.3项目中so库文件的处理方法

内置到不同的位置就有不同的处理方法以下详细介绍。

2.3.1 应用内置到/system/app或/system/pri-app

对于安装到system/app system/pri-app 可以在devices/qcom/msmxxx/msmxx.mk中编写PRODUCT_COPY_FILES命令把so库文件拷贝至system/lib或system/lib64下。

2.3.2 应用内置到/vendor/app

对于安装到vendor/app 中的应用也可以参考2.3.1节中的方法把so库文件拷贝到system/vendor/lib或system/vendor/lib64文件夹中。

2.3.2 应用内置到/data/app

对于安装到/data/app中的应用,就不能使用上述的方法进行so库文件的copy.

  1. 编写开机服务:

 在system/core/rootdir/init.rc中添加开机启动服务。

service flash_recovery /system/bin/install-recovery.sh

class main

oneshot

  1. 编写脚本

#!/bin/bash

if [-d "/data/app-lib/liblocSDK7b.so"];then

    copy /system/lib64/liblocSDK7b.so  /data/app-lib/liblocSDK7b.so

fi

(3)内置文件

使用PRODUCT_COPY_FILES 把执行的脚本install-recovery.sh

拷贝到system/bin/目录下。

使用PRODUCT_COPY_FILES 把so库文件拷贝至system/lib64下

基于最新的Android 10.0版本内置当前应用:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_PACKAGE_NAME := EmeetOta

LOCAL_CERTIFICATE := platform

LOCAL_MANIFEST_FILE := app/src/main/AndroidManifest.xml

LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/app/src/main/res \
  frameworks/support/v7/appcompat/res


LOCAL_SRC_FILES += $(call all-java-files-under, app/src/main/java) $(call all-Iaidl-files-under, app/src/main/aidl)

LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/app/src/main/aidl

LOCAL_PREGUARD_ENABLED :=disabled

LOCAL_MODULE_TAGS := optional

LOCAL_PRIVATE_PLATFORM_APIS := true

LOCAL_MIN_SDK_VERSION := 21

LOCAL_PRIVILEGED_MODULE := true

LOCAL_USE_AAPT2 := true

LOCAL_MODULE_OWNER := mtk

LOCAL_MODULE_PATH := $(TARGET_OUT)/system/app

LOCAL_PROGUARD_FLAG_FILES := proguard.flags

LOCAL_STATIC_JAVA_LIBRARIES += okio-1.13.0 \
   okhttp-3.9.0 \
   android-support-v7-appcompat \
   android-support-v4 \

LOCAL_AAPT_FLAGS := \
      --auto-add-overlay \
      --extra-packages android.support.v7.appcompat
include $(BUILD_PACKAGE)

include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
    okio-1.13.0:app/libs/okio-1.13.0.jar \
    okhttp-3.9.0:app/libs/okhttp-3.9.0.jar \

include $(BUILD_MULTI_PREBUILT)

3. APK文件内置到系统

单独的APK文件内置到系统里,可以参照高通应用内置的方法进行内置。

LOCAL_MODULE_PATH :=$(你需要安装的位置)如:

$(TARGET_OUT_DATA_APPS)

$(TARGET_OUT)/app

$(TARGET_OUT)/vendor/app

 

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE := TimeZone (指定应用名称)

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

LOCAL_PREBUILT_JNI_LIBS := \

@lib/armeabi/liblocSDK7b.so (app中带有的so文件)

$(warning "$(COMMON_ANDROID_PACKAGE_SUFFIX)")

LOCAL_DEX_PREOPT := false

LOCAL_MODULE_PATH :=$(TARGET_OUT_DATA_APPS) (app安装的路径)

LOCAL_CERTIFICATE := PRESIGNED(因编辑器编译成apk已经打上的签名,则不需再去签名)

LOCAL_PRIVILEGED_MODULE := false

include $(BUILD_PREBUILT)

因IDE工具编译打包的时候也会把SO库文件一起打包到APK文件中,所以我们不需要额外的去copy文件。

NOTICE:最后记得在mk中的PRODUCT_PACKAGE中加入新模块的名称。

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值