Delphi和Android Studio混合开发(二)FMX项目和Android混合开发

Delphi开发Android程序非常快,拖拖拉拉几下子就可以开发出一个Android程序,而且还可以随意输出成Windows,Mac,Linux,iOS上面。

但是因为Delphi和Android Studio开发的的Android APP还是有点区别的,和C++开发Android APP类似,Delphi是编译成SO然后由Java代码中LoadLibrary加载,所有界面都是FMX自绘制的。Delphi IDE只能集成.jar,无法集成.aar,集成.aar要解压开,拿出里面的.jar,.so以及资源文件等手动集成进去。因为没有gradle也没有继承maven库上代码的功能,只能把maven库上面的.aar下载回来,解压集成,一旦三方库升级,又要手动下载解压。。。。

这里就又有一个方案,还是Delphi和Android Studio混合开发。

就是借助Delphi + FMX的快速开能力,迅速开发各种平台APP,当需要Android平台时,把Delphi编译出来的.so(实际上也就是Delphi开发的APP的全部代码部分)复制放到Android Studio中,其他部分由Android Studio开发,三方库maven的集成也有Android Studio来负责。

先说一下Delphi FMX开发的Android APP的原理。

Delphi的Android APP,实际上只有一个Activity,名字叫com.embarcadero.firemonkey.FMXNativeActivity,我们见到的FMX的各种UI都是在这个Activity上绘制出来的。FMXNativeActivity类的代码是写死在fmx.jar中,这个文件是放在

C:\Program Files (x86)\Embarcadero\Studio\23.0\lib\android\release文件夹中的,当然也有源代码项目放在C:\Program Files (x86)\Embarcadero\Studio\23.0\source\rtl\androiddex\java\fmx

在AndroidManifest的Activity声明的时候有个meta表示应该加载的是哪个.so

好了,下面介绍一下怎么在Android Studio创建的项目中使用FMX的界面。

先创建一个普通的Delphi的多平台FMX项目,Form上放一个图片,点击展示一个消息框。平台选择Android 64bit.

Build一下这个项目。找到Android\Release文件夹中的.so文件。

新建Android Studio项目,我选择的是无Activity项目,当然也可以创建有Activity的项目。然后把前面的.so文件复制到项目的libs\arm64-v8a文件中,把前面说的C:\Program Files (x86)\Embarcadero\Studio\23.0\lib\android\release\fmx.jar复制到libs中,因为fmx.jar里面有Activity的源代码。

然后再回到Delphi项目的Android64\Release\AndroidManifest.xml,把Activity的声明复制到Android Studio的AndroidManifest.xml中。

因为fmx.jar中用到了PickVisualMedia contract,所以如果你的项目编译的时候提示找不到PickVisualMedia,那么请在app的build.grale中添加引入依赖。

//for PickVisualMedia contract
implementation "androidx.activity:activity-ktx:1.6.1"

好了,可以直接打包运行了,因为Activity在AndroidManifest.xml中有声明是启动器,所以APP运行起来直接就是我们的FMX界面。

你也可以去掉框出来的部分,这样FMX Activity就不是APP运行的时候的启动Activity了。你可以在其他代码中用startActivity的方式把这个FMX的界面调出来。

下面就可以享受这种混合开发方式的好处了:

1.FMX开发编码的速度快,.so文件运行速度快,有一定的防逆向能力。

2.放到Android Studio后,接入三方sdk十分方便,比如可以直接接入微信,支付宝,友盟统计等,通过maven接入,只要在Gradle中声明即可。版本号写成加号,就可以每次打包都是最新版,不像Delphi原生那样需要下载aar或者jar,解压,选文件,生成R.java等。

3.因为主业务功能是用Delphi + FMX开发的,还可以选择输出成iOS ,Windows,MacOS,Linux等的程序。

本文的DEMO链接,内有Android Studio项目和Delphi 的SO项目。

此条目发表在Android, APP, Delphi, 未分类分类目录,贴了, , , , , 标签。将固定链接加入收藏夹。