前言
整理以前项目的时候发现以前做交叉编译,当时是交叉编译一个开源的c++项目到Android,直接使用NDK需要修改太多源码,本人对C也不是很熟悉,就研究了交叉编译。
本人电脑是 Ubuntu16.04
,测试手机Android 8.0
系统
交叉编译工具链
安装 gcc:
sudo apt-get install arm-linux-gnueabi-gcc
安装g++
sudo apt-get install arm-linux-gnueabi-g++
安装cmake
sudo apt-get install cmake
Hello.c
#include <stdio.h>
int main()
{
printf("helloworld!\n");
return 0;
}
生成ARM可执行文件
先使用gcc
直接编译,后面使用cmake
在做一次。
arm-linux-gnueabi-gcc hello.c -o hello -static
当前目录下会生成一个名为hello的可执行文件,注意 -static
是一定要添加的
导入到设备
直接倒入到外置存储根目录:
adb push hello /sdcard/
此时shell
进去还是无法运行。
在Android程序中调用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new Thread(() -> {
CommandResult exec = ShellCommand.exec("cp /sdcard/hello /data/data/com.dome.hotfixdome/", false);
Log.i(TAG, "run0: "+exec);
CommandResult exec1 =ShellCommand.exec("chmod 751 /data/data/com.dome.hotfixdome/hello", false);
Log.i(TAG, "run1: "+exec1);
CommandResult exec2 = ShellCommand.exec("/data/data/com.dome.hotfixdome/hello", false<