android 预置apk so库 jar包等

android 预置apk so库 jar包等

LOCAL_PATH := $(call my-dir)
这一行每个Android.mk 都是要添加的

1.预置aliuyi.apk

预制一个普通的apk

include $(CLEAR_VARS)
LOCAL_MODULE := wwwa.apk 
LOCAL_SRC_FILES := aliuyi.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT)/app
include $(BUILD_PREBUILT)

编译一个需要特殊vendor key签名的APK

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
LOCAL_CERTIFICATE := vendor/example/certs/app
# Tell it to build an APK
include $(BUILD_PACKAGE)

预制一个带jar 包的有源码的apk

(这里以系统的计算器apk 为例)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES := libarity android-support-v4 guava
LOCAL_SRC_FILES := $(call all-java-files-under, src)
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
include $(BUILD_MULTI_PREBUILT)
# Use the following include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))

上面的 libarity 指的就是在 Calculator 目录下面的一个jar 包.

2.预置so等资源文件

方法一:预置so等资源文件

include $(CLEAR_VARS)
LOCAL_MODULE := wanghai.so
LOCAL_SRC_FILES := wanghai.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT)/lib/
include $(BUILD_PREBUILT)

方法二:预置so等资源文件

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PREBUILT_LIBS := sdfapk.so sdffff.so
include $( BUILD_MULTI_PREBUILT)
备注:上面的方法是把文件预制到system/lib/里面如果要预制到system/lib/hw/下面可以参考下面
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw语句改成了
LOCAL_MODULE_RELATIVE_PATH := hw,然后再重新编译。
网上说第一个实验path会报错,但是没有验证,实验第2中验证是正常的.

方法三:预置so等资源文件

预置so等资源文件,在Android.mk里 添加 这样一句,注意:这样的方式 如果路径不存在,这条指令 执行 失败,但 不会 报错!
$(shell cp -rf $(LOCAL_PATH)/libs/*.so $(TARGET_OUT)/lib)

3.预制jar包到系统

方法1:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := birdframework_classes:birdframework_classes.jar
include $(BUILD_MULTI_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := birdframework
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_NO_EMMA_INSTRUMENT := true
LOCAL_NO_EMMA_COMPILE := true
LOCAL_DX_FLAGS := --core-library
LOCAL_STATIC_JAVA_LIBRARIES := birdframework_classes
include $(BUILD_JAVA_LIBRARY)
#这里的birdframework_classes 只是一个别名,可以随便取.

方法2:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := xcap
LOCAL_SRC_FILES := javalib.jar
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE_SUFFIX := .jar
include $(BUILD_PREBUILT)


4.编译一个静态JAVA库(把java代码打包为jar)

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Any libraries that this library depends on
LOCAL_JAVA_LIBRARIES := android.test.runner
# The name of the jar file to create
LOCAL_MODULE := sample
# Build a static jar file.
include $(BUILD_STATIC_JAVA_LIBRARY)


---------- cut here ------------------

解释:

1.LOCAL_PATH := $(call my-dir) 
一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数‘my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。
(菜鸟级别解释::=是赋值的意思,+=是追加的意思,$是引用某变量的值)
2.include $( CLEAR_VARS)
CLEAR_VARS由编译系统提供((可以在 android 安装目录下的/build/core/config.mk 文件看到其定义,为 CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk))
指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。
3.LOCAL_MODULE_TAGS :=user eng tests optional
user: 指该模块只在user版本下才编译
eng: 指该模块只在eng版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译
4. LOCAL_STATIC_JAVA_LIBRARIES  和 LOCAL_JAVA_LIBRARIES 的区别
LOCAL_JAVA_LIBRARIES 是添加的动态库,
LOCAL_STATIC_JAVA_LIBRARIES是添加的静态库(编译会以拷贝的方式加到需要他的应用中)


LOCAL_MODULE 指定 拷贝后的apk的名字(全名),这个变量里可以有路径,但路径也会被拷贝,创建如果 是在编译整个android的源码,这个apk必须已经添加到了PRODUCT_PACKAGES 变量里,否则 不会拷贝到,相应的位置,

LOCAL_MODULE_PATH 指定拷贝的路径,如果路径不存在自己创建

LOCAL_CERTIFICATE := PRESIGNED 表示 这个apk已经签过名了,系统不需要再次 签名;

LOCAL_MODULE_CLASS 指定文件类型,apk文件用APPS, 并且 会检查 是否是apk文件,动态库so文件用SHARED_LIBRARIES ,bin文件用EXECUTABLES,其他文件 用ETC

注意:若是被预置的apk里有so库,需要将从Test.apk的 so库拷贝到 out/target/product/xxx/system/lib/目录下,若无 so 库,则去掉此步;

方法一 只能针对 一个文件,方法二 可以 针对多个文件,但 只能 把 文件 拷贝到 system/lib/ 下,
Android提供了Prebuilt编译方法,两个文件prebuilt.mk和multi_prebuilt.mk,对应的方法宏是BUILD_PREBUILT和 BUILD_MULTI_PREBUILT。
prebuilt.mk就是prebuilt的具体实现,它是针对独立一个文件的操作,multi_prebuilt.mk 可以针对多个文件的,它对多个文件进行判断,然后调用prebuilt对独立一个文件进行处理




参考:




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值