Android系统预制APK、so和bin的方法

来源:互联网 发布:网络教育好不好 编辑:程序博客网 时间:2024/05/16 00:29

一、Android系统中预制APK

1. 预制有源码的APK的Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
// optional:指该模块在所有版本下都编译
LOCAL_SRC_FILES := $(call all-java-files-under, src)
// 获取所有子目录的java文件
LOCAL_PACKAGE_NAME := TestDemo
// 包名
LOCAL_CERTIFICATE := platform
//签名
LOCAL_PROGUARD_ENABLED := disabled
//不要使用代码混淆的工具进行混淆
include $(BUILD_PACKAGE)
 // 编译 APK

2. 预制没有源码的APK的Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := SogouInput
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE:=PRESIGNED // 签名
,注意,PRESIGNED表示保留apk文件之前的签名
#LOCAL_CERTIFICATE:=platform // 签名,注意,platform
对apk重新进行签名
LOCAL_SRC_FILES := $(LOCAL_MODULE)$(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

注:device.mk中需要添加PRODUCT_PACKAGES += LOCAL_MODULE

这样在Android代码全Build时,APK才会预制到system.img里面。


二、Android系统中预制so

1. 预制有源码的so的Android.mk

LOCAL_PATH := $(call my-dir)
sources :=
***
cincludes :=
***
LOCAL_MODULE := lib
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(sources)
LOCAL_C_INCLUDES := $(cincludes)LOCAL_32_BIT_ONLY := true
LOCAL_CFLAGS := -DMSOS_TYPE_LINUX -DENABLE_LOGGER
LOCAL_SHARED_LIBRARIES :=
*** ***
LOCAL_MODULE_TARGET_ARCH:= arm64/
/如果64换成32就是32bit
LOCAL_MULTILIB := 64 //如果64换成32就是32bit

include $(BUILD_SHARED_LIBRARY)
 

2. 预制没有源码的so的Android.mk

// 如果同时预制32位和64位的so

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_SUFFIX := .so

LOCAL_MODULE := libabc

LOCAL_MODULE_CLASS := SHARED_LIBRARIES

LOCAL_SRC_FILES_arm :=lib/abc.so

LOCAL_SRC_FILES_arm64 :=lib64/libabc.so

LOCAL_MODULE_TARGET_ARCHS:= arm arm64

LOCAL_MULTILIB := both

include $(BUILD_PREBUILT)

 

//如果只预制32 bit的so

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_SUFFIX := .so

LOCAL_MODULE := libabc

LOCAL_MODULE_CLASS := SHARED_LIBRARIES

LOCAL_SRC_FILES_arm :=lib/libabc.so

LOCAL_MODULE_TARGET_ARCHS:= arm

LOCAL_MULTILIB := 32

include $(BUILD_PREBUILT)

 

//如果只想预制64 bit的so

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_SUFFIX := .so

LOCAL_MODULE := libabc

LOCAL_MODULE_CLASS := SHARED_LIBRARIES

LOCAL_SRC_FILES_arm64 :=lib64/libabc.so

LOCAL_MODULE_TARGET_ARCHS:= arm64

LOCAL_MULTILIB := 64

include $(BUILD_PREBUILT)

注:so文件涉及到ABI的兼容性问题,详细可参考如下博客的文章:

http://blog.csdn.net/yanleizhouqing/article/details/51803392


三、Android系统中预制bin

1. 预制有源码的bin的Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= netcfg.c
LOCAL_MODULE:= netcfg
LOCAL_SHARED_LIBRARIES := libc libnetutils
include $(BUILD_EXECUTABLE)

2. 预制没有源码的bin的Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := pppd
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)

3.apk的Android.mk中预制bin

LOCAL_POST_PROCESS_COMMAND := $(shell cp -rf $(LOCAL_PATH)/libs/armeabi/traceroute  $(PRODUCT_OUT)/system/bin/opt/bin/) 

// 此命令预制的bin apk有读写执行的权限


0 0
原创粉丝点击