大致理清一下思路,.h 全是.c 文件的函数声明,还有结构体,宏的定义等等,单独的.c 语言编译后是可执行程序,打开就直接运行 main 函数,而 so 库(Android,Linux),dylib(Macos),dll(windows),是由.c,.h 共同编译的,这时候的.c 文件一般没有 main 函数,.h 复制提供函数声明但实际不参加编译过程, 我大致查了 so 库的编译,都说配置 Android.mk 比较麻烦我也就没有去了解了,整个编译的坑全靠上面第一个帖子趟过,我这自己走一遍
可以观察到有两个 sh 脚本,主脚本 build_android.sh,然后主脚本主要遍历出需要编译的架构,然后设置环境变量,调用副脚本 android.sh src 里面就是.c 跟.h,我自己写的时候并没有写.h,也能出 so 库,所以我就没单独写了,可以观察到我脚本取消了.sh 的扩展名,这样就能直接通过 shebang 直接执行了,不会唤起我的 xcode,贴一下改过的两个脚本
build_android.sh
1 2 3 4 5 6 7 8 9 10
#!/bin/bash cd /Users/nightmare/Desktop/C/nterm/android rm -rf ./build a="armeabi-v7a arm64-v8a x86 x86_64" for abi in$a; do export ABI=$abi sh cmd/android.sh done cp -rf ../../android/libs/* /Users/nightmare/Desktop/Flutter_Project/nightmare_tool/android/app/libs/
这串还是比较好懂得 cd 命令切换到了这个 C 项目的 android 目录下,export 即是更新一个环境变量,以让副脚本使用,我最后再用了 cp -rf 复制到了我的安卓项目的 libs 文件夹下,对应自己的路径改了就能用