目录

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工程

Android内置应用到系统的方法总结_第1张图片

2.1.1 代码目录结构(AutoTimeZone)

Android内置应用到系统的方法总结_第2张图片

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)

Android内置应用到系统的方法总结_第3张图片

 

2.2.2 Android makefile的编写

Android内置应用到系统的方法总结_第4张图片

 

 

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下

 

 

 

 

 

 

 

 

 

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中加入新模块的名称。

更多相关文章

  1. Android NDK开发(一)——ndk-build编译生成so库文件并使用
  2. FirefoxOS 系统进程初步分析 底层系统继承自 android
  3. Android 系统的架构
  4. Gradle in Android Studio (1) - 构建系统概述
  5. Android M及以上版本系统 悬浮窗权限 的解决方案
  6. win7下修改AVD默认路径
  7. Android 学习笔记4---签名Android的执行文件

随机推荐

  1. Android(安卓)RecyclerView使用详解
  2. Android之——手机黑名单的实现
  3. TextView常见功能应用
  4. [置顶] Android FrameWork Service 之 St
  5. Android四款系统架构工具
  6. android实现自动对焦拍照
  7. android中文件IO
  8. 【Android】四种基本布局
  9. Android shape方法绘制图形的方法和属性
  10. android面试知识点详情