Android 编译不带源码(src)只带资源文件(res和AndroidManifest.xml)的apk

最近在调用谷歌的一个接口时,谷歌规定要编译一个只含有res和AndroidManifest.xml的apk预制进系统里,才能实现一个功能。
看似很简单,因为从来没编过写过这样的应用。这下把人难住了。这里不说直接在android studio中编译。这里说说在android系统源码环境中如何编译。
起初我在AndroidManifest.xml里面配好我要的后,然后开始编写mk文件。mk文件我是按照项目中其它apk(这个apk是有源码的)的mk文件来编写的。如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_RESOURCE_DIR := \
                $(LOCAL_PATH)/res
LOCAL_CERTIFICATE := platform
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
LOCAL_PACKAGE_NAME := stub
LOCAL_PRIVILEGED_MODULE := true
ALL_DEFAULT_INSTALLED_MODULES += $(LOCAL_PACKAGE_NAME)
include $(BUILD_PACKAGE)

但是始终编译不过,报错也从来没见过。

然后就在思考是那现出来问题,后来才想到了framwork底下有个res文件夹,这个每次编译完不是就生成了framework-res.apk文件莫,于是参考了它底下的mk文件更改后。编译通过,问题得到解决。

Android 编译不带源码(src)只带资源文件(res和AndroidManifest.xml)的apk对应的mk文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PACKAGE_NAME := stub
LOCAL_CERTIFICATE := platform
LOCAL_AAPT_FLAGS := -x
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(TARGET_OUT_JAVA_LIBRARIES)
LOCAL_EXPORT_PACKAGE_RESOURCES := true
include $(BUILD_PACKAGE)

这里顺带再附上将无源码的apk文件预制进system/app的对应mk文件。(当然要将apk预制进系统,还需要在文件 build/target/product/ P r o j e c t . m k {Project} 表示工程名)然后将 apk名添加到 PRODUCT_PACKAGES 里面。)

LOCAL_PATH := $(call my-dir)(必须以这个开头)
##------------------copy apps to system/app--------------------------##
include $(CLEAR_VARS)  (清除掉除LOCAL_PATH外的变量)
APPS := $(notdir $(wildcard $(LOCAL_PATH)/*.apk))
APP_NAME := $(basename $(APPS))
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE :=$(APP_NAME)
LOCAL_SRC_FILES := $(APPS)
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED(已经签过名,不需要签名。签名用platform)

猜你喜欢

转载自blog.csdn.net/xct841990555/article/details/80896405