android源码树中管理app

160 阅读2分钟

这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战

软硬件环境

  • OTT BOx with android 5.1.1

前言

在做 android 开发时,有时需要事先将应用程序烧写到板子上去而不必让用户在板子出厂后自行安装。将应用导入到 android 源码树可以分为两种情况:应用的 apk 文件和工程源码,下面将一一介绍。

APK文件形式导入

这种方式最简单,app 源码与 android 源码分开管理,互不相干。App 发布后,再放进 android 源码库中编译打包。主要有以下几个步骤

在应用程序所在目录创建文件夹

一般是 packages/apps/ 这个目录或者厂家自己存放 apps 的位置,创建一个自己独立的文件夹

mkdir Hello

将Hello.apk拷贝到刚才所创建的文件夹下

copy Hello.apk Hello

在apk同级创建Android.mk文件

然后建立 mk 文件,内容为

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
	
LOCAL_MODULE := Hello.apk
LOCAL_MODULE_TAGS := eng
LOCAL_MODULE_CLASS := EXECUTABLE
LOCAL_MODULE_PATH := $(TARGET_OUT_APPS)
LOCAL_SRC_FILES := $(LOCAL_MODULE)

到android根目录进行编译

最后,开始进行 android 源码编译,这个过程会生成镜像文件,其中就包含了 apk 文件

make

应用源码形式导入

在应用程序所在目录创建文件夹

一般是 packages/apps/ 这个目录或者厂家自己存放 apps 的位置

mkdir Hello

将工程源码拷贝到Hello文件夹下

app 的源码拷贝过来

copy -rf Hello/* Hello/

新建Android.mk文件

同样的,创建 mk 文件

LOCAL_PATH:= $(call my-dir) 
include $(CLEAR_VARS)

LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := Hello
LOCAL_MODULE_TAGS := eng 
	
include $(BUILD_PACKAGE)

到android根目录进行编译

最后还是编译

make

如果 app 中调用了 c 库,则工程中会有个 jni 目录

source_tree_01

这里的 Android.mk 是用来编译 C 文件产生 lib*.so 的,如

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

# java中System.loadLibray()使用 
LOCAL_MODULE := SerialPort
LOCAL_SRC_FILES := SerialPort.c 	
LOCAL_LDLIBS := -llog 
include $(BUILD_SHARED_LIBRARY)

那么,此时工程的 Android.mk 可如下

LOCAL_PATH:= $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE_TAGS := eng 
LOCAL_SRC_FILES := $(call all-java-files-under, src) 
LOCAL_PACKAGE_NAME := testApp 
LOCAL_CERTIFICATE := platform 
LOCAL_JNI_SHARED_LIBRARIES := libserial_port 
LOCAL_PROGUARD_ENABLED := disabled 
include $(BUILD_PACKAGE) 
include $(call all-makefiles-under,$(LOCAL_PATH))

准备好后,就可以重新编译了

make