文章目录
- Android系统源码中添加可编译运行执行程序,C,C++
- 1. 源码product分区中添加可执行程序
Android系统源码中添加可编译运行执行程序,C,C++
1. 源码product分区中添加可执行程序
新建一个文件夹,以及一个test.cpp文件
代码
#include <cstdio>
int main(int argc, char const *argv[]){
printf("test c++\n");
return 0;
}
搞一个bp文件
Android.bp,bp文件就是指定这个模块的编译脚本方式,指定test.cpp编译方式。格式就是json字符串
//指定可执行模块的类型
//cc就是c++的意思,binary就是二进制可执行文件
cc_binary {
//当前模块名字
name: "test",
//源码路径
srcs : [ "test.cpp" ],
//放置在product分区目录下
product_specific: true
}
编译它,单编,mm命令,进入到需要编译的目录下
系统源码全部整编。
在mk文件中添加
PRODUCT_PACKAGES += test
打包出来的系统镜像文件才会包含我们刚刚自定义的test文件模块才会被添加到我们的编译后的系统镜像文件中,成为product的一部分,
#
# Copyright 2013 The Android Open-Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
PRODUCT_USE_DYNAMIC_PARTITIONS := true
# The system image of aosp_x86_64-userdebug is a GSI for the devices with:
# - x86 64 bits user space
# - 64 bits binder interface
# - system-as-root
# - VNDK enforcement
# - compatible property override enabled
# This is a build configuration for a full-featured build of the
# Open-Source part of the tree. It's geared toward a US-centric
# build quite specifically for the emulator, and might not be
# entirely appropriate to inherit from for on-device configurations.
# GSI for system/product
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/gsi_common.mk)
# Emulator for vendor
$(call inherit-product-if-exists, device/generic/goldfish/x86_64-vendor.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/emulator_vendor.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/board/generic_x86_64/device.mk)
# Enable mainline checking for excat this product name
#ifeq (aosp_x86_64,$(TARGET_PRODUCT))
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
#endif
PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
root/init.zygote32_64.rc \
root/init.zygote64_32.rc \
# Copy different zygote settings for vendor.img to select by setting property
# ro.zygote=zygote64_32 or ro.zygote=zygote32_64:
# 1. 64-bit primary, 32-bit secondary OR
# 2. 32-bit primary, 64-bit secondary
# init.zygote64_32.rc is in the core_64_bit.mk below
PRODUCT_COPY_FILES += \
system/core/rootdir/init.zygote32_64.rc:root/init.zygote32_64.rc
PRODUCT_PACKAGES += test
# PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
# /system/bin/test
# PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST +=\
# /system/bin/helloworld
PRODUCT_NAME := test1
PRODUCT_DEVICE := generic_x86_64
PRODUCT_BRAND := Android
PRODUCT_MODEL := AOSP on x86_64
整编命令make -j12
然后启动模拟器看看是否被预置到product分区目录下,
我们执行一下这个程序,输出即可