想把c++库,引入到Examarin中来,c++实现算法,Examarin实现UI。这对以前的c++ dll工程来说,可以节省大量的重复开发工作。但,看起来简单,实在问题很多。
开发工具想用vs2022,但不好意思,费好大的劲,bing、baidu到处搜,没走通。根本原因是,vs2022的c++新建项目模板中,里面没有“native-activity应用程序(android)”,路过老外的一个回复,好像是vs2022去掉了。原生的c++Android应用程序,想使用模板,就不能生成了。(如果大家想走这条路,用VS2019吧,安装上C++跨平台相关的选项。如果不用c++建android apk,可以用vs2022.)
有几个词,先说一下:
工具-》Android-》Android SDK管理,如上图。
SDK,是Android Java开发包。 NDK,是c/c++开发包,需要安装,不然c++就无法编译、生成。
c++生成的android库,通常是xxx.so 后缀,.so 表示是库文件。
Android ABI,CPU指令接口。 安卓运行的CPU类型比较多:
右键Examarin工程-》属性。如上图。
v7a,v8a都是Arm 的架构,指令集模式是不同的。 c++编译后,是直接调用硬件指令集的。因此,我们选择的架构不同,编译后的.so就不同。
重点来了:我们选了几个架构,就要生成几个.so文件(下面有说明),不然,会出现一个,让你崩溃的提示:
DllNotFoundException。 这几天,我让这个提示,搞到崩溃。各种的不行。
开始正餐:
vs2019,新建一个Xamarin工程。
再新建一个C++共享库:
c++共享库,属性设定。(重点,不要错)
我创建了一个FunT的测试库,将生成一个libFunT.so的库文件。 注意,上面的平台,是ARM64。
Func.cpp文件,加一行测试的导出函数:
extern "C" int Add_Integers(int a, int b) { return a+ b+ a; }
真正的重点来了:
第一步,照上面的路径,建好目录。并将上面FunT生成的so文件,一个一个放进去。目录与你选的cpu架构要一致,不然就会出现DllNotFoundException。
第二步,设置属性。
不要问不这样做行不行,问就是泪。
最后一步:
ok了。