Android 10 根文件系统和编译系统(九):Android.mk编译可执行程序

配套系列教学视频链接:

Android 10.0 AOSP源码编译:

        AOSP源码开发环境搭建教学视频-百问100ask   

       Android系统 10.0 AOSP源码编译--CSDN程序员研修院

 Android 10.0 根文件系统和编译系统:

        Android根文件系统和编译系统教学视频-百问100askicon-default.png?t=N7T8https://www.100ask.net/video/Android

        Android 10.0 根文件系统和编译系统-CSDN程序员研修院


说明

系统:AOSP Android10.0

设备:Android模拟器

前言

本文章重点讲解Android.mk如何控制编译c代码的可执行程序。


一, 可执行程序代码

在Anroid层目录新建mytest/exe_test/目录, 并创建文件名:mytest/exe_test/main.c 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
       

void *my_test_thread (void *args)
{
	printf("my_test_thread running...\n");
	return NULL;
}

int main(void)
{
	int fd = -1;
	pthread_t tid;
	
	printf("hello world!\n");	
	
	
	fd =  open("/dev/input/event0", O_RDWR);
	if(fd < 0)
	{
		printf("open error: %s", strerror(errno));
		exit(1);
	}
	printf("fd = %d\n", fd);
	
	pthread_create(&tid, NULL,  my_test_thread,  NULL);
	pthread_join(tid, NULL);


	return 0;
}

二, Android.mk编写

Android源码参考模板: system/extras/su/Android.mk

mytest/exe_test/Android.mk

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

LOCAL_CFLAGS += \
                -Wno-error \
                -Wno-unused-parameter

LOCAL_SRC_FILES:= main.c

LOCAL_MODULE:= hello_exe_test

include $(BUILD_EXECUTABLE)

此处添加了LOCAL_CFLAGS编译标志, 表示如果存在没有使用的参数,就不要报错。

三, 编译

source build/env_setup.sh

lunch  aosp_x86_64-eng

mmm  mytest/exe_test/

生成的目标文件有如下:

中间文件: out/target/product/产品名/obj/EXECUTABLES/hello_exe_test_intermediates/

目标文件:out/target/product/产品名/system/bin/hello_exe_test 

此处产品名并没有特别说明是哪一个, 大家未来开发的时候, 产品可以选择不同, 这个产品名就根据自己实际的来定。

四,运行

启动emulator时需要加参数: -writable-system, 如:

emulator -no-snapshot -verbose -show-kernel -writable-system -cores 4

这样才能使用adb remount, 将system或者vendor重新挂载成可读写分区 , 执行如下命令实现运行:

cd  out/target/product/产品名/

adb  remount 

adb push  system/bin/hello_exe_test   /system/bin/

adb shell

hello_exe_test 

 总结

对于程序运行,不一定是要放到虚机的/system/bin目录, 可以放在其他路径, 如/data/目录, 只要权限和分区读写属性允许即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旗浩QH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值