专栏首页Flutter入门到实战黑科技:使用AI和机器学习将Android项目秒变IOS项目

黑科技:使用AI和机器学习将Android项目秒变IOS项目

最近看Github,发现了一个刚出炉的黑科技:利用人工智能(AI)和机器学习(ML)技术将现有Android源代码转换成iOS代码。目前支持Android项目中的资产目录文件和UI布局转换,以及部分外部库的转换。有了这个神器,以后一个人就可以轻松搞定两个平台了,真是爽歪歪啊。。。。我根本不需要学习iOS了。。。


已支持的功能:

  1. Android的资产目录 (如:jpgpng.9图等) => "Assets.xcassets"
  2. mipmap目录的图片资源 => “.appiconset”
  3. Color形式的xml => “.colorset”
  4. Shape形式的xml => PDF format in asset catalog
  5. Vector形式的xml文件 => Swift Code (CAShapeLayer)
  6. Animation形式的xml文件
  7. UI布局的xml文件 => storyboard file
  8. Java的POJO类 => Swift
  9. 外部的库Glide的转换

正在开发中的功能:

  1. 资源(Resource)xml文件
  2. Android SDK的类
  3. 更多的外部的库,比如:GSON, Retrofit2, ButterKnife等。
  4. 矢量图动画(Vector Animation)xml资源

未来支持的功能:

  1. Android的Kotlin语言
  2. Android的JetPack
  3. Android的代码编写的布局 转成 SwiftUI
  4. Lagacy .storyboard 转成 SwiftUI
  5. 测试用例的生成

UI的转换

目前支持CardView,Switch,ImageButton,ToggleButton这些控件类型的转换。

部分效果图如下:

CardView的屏幕截图:

image

开关,ImageButton,ToggleButton的屏幕截图:

image

Button的屏幕截图:

image

TextView的屏幕截图:

image

使用普通键盘的EditText的屏幕截图:

image

带电话拨号键盘的EditText的屏幕截图:

image

布局的转换

目前支持RelativeLayout,FrameLayout,LinearLayout (Nested),ConstraintLayout,TableLayout和ScrollView这些布局类型的转换。另外只有部分布局属性做了转换,如下表所示:

Control

Attributes

LinearLayout

orientation, gravity, background, textAppearance

RelativeLayout

layout_centerHorizontal, layout_centerVertical, layout_toLeftOf, layout_toRightOf, layout_above, layout_below, layout_alignParentTop, layout_alignParentBottom, layout_alignParentRight, layout_alignParentLeft

FrameLayout

layout_marginTop, layout_gravity = right, left, right+bottom, left+bottom, center, center_horizontal, center_vertical, right+center_vertical, bottom+center_horizontal

ConstraintLayout

Bottom_toBottomOf, Top_toTopOf, Top_toBottomOf, Left_toLeftOf, Start_toEndOf, Right_toRightOf, Baseline_toBaselineOf, Vertical_bias, Horizontal_bias

TableLayout

TableLayout, TableRow, background, padding

ScrollView

ScrollView, android.support.v4.widget.NestedScrollView, HorizontalScrollView, android:scrollbars

LinearLayout的屏幕截图:

image

image

RelativeLayout的屏幕截图:

image

image

FrameLayout的屏幕截图:

image

image

ConstraintLayout的屏幕截图(这个也做了移植,确实经惊艳到我了):

image

image

TableLayout的屏幕截图:

image

image

ScrollView的屏幕截图:

ScrollView_ScreenRec.gif


资产目录文件的转换

这一部分内容比较多,简单的说就是把Android工程的res目录的文件转换成iOS工程的Assets.xcassets目录的文件。

  • mipmap目录的图片资源:Android工程的mdpi,hdpi,xhdpi和xxhdpi的图像资源被映射到iOS工程的1x,2x和3x图像资源路径里面。
  • 针对.9.png图片文件:在catalog中为asset添加了切片(slicing )信息。
  • Vector图片形式的xml被转换成Storyboard上能够使用的.pdf文件。
  • 向量图像xml也被转换成Swift代码,并在VectorStore.swift中为每个vector文件添加一个静态方法。

除此之外还支持.png,color形式的xml,Shape形式的xml,Animation形式的xml的转换。


以下是使用截图:

Android和iOS设备的显示了各种资产的使用情况的屏幕截图:

image


Android Studio布局编辑器:

image

Xcode Storyboard编辑器:

image


Android Studio Asset资源图片:

image

Xcode Asset 面板:

image


Android Studio .9.PNG 图片资源编辑器:

image

Xcode Asset面带有从.9.png文件中提取的切片信息:

image

Vector矢量图的转换截图对比:

image

Shape xml文件的对比:

image

动画转换的对比:

Android

iOS

事实上效果是同步的,只是录屏和操作步骤不一致的原因,看起来有些延迟。


外部库Glide的转换

支持的功能:

  • 从本地res文件夹加载drawable
  • 从URL加载图片
  • 将图片加载到UIImageView
  • 在下载过程中提供占位符图片
  • 在图片之间应用过渡:CrossFade,Flip
  • 支持图片Transformation (变换)API:circleCrop(),centerCrop(),fitCenter(),centerInside()
  • 清除待处理的请求
  • RequestOptions类可在实例之间重用设置

待支持的API:

  • priority()
  • diskCacheStrategy()
  • asBitmap()
  • error()
  • fallback()
  • clearMemory()

使用截图:

image


计算器App

这是一个移植的计算器项目。

使用截图如下,还是挺酷选的呢,效果保持一致,操作也很流畅:

image


最后附上官网地址,有兴趣的可以去看看。

官网地址:http://www.reflectcode.com/

Github: https://github.com/ReflectCode/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 虚假应用潜入TOP100:论恶意软件如何逃过检测

    Google play和ios应用商店对试图诱骗用户下载广告或恶意软件的应用有很严密的检测。最近,我们还发现了隐藏在应用商店合法产品中的恶意应用程序。这些应用诱...

    FB客服
  • 这30个CSS选择器,你必须熟记(上)

    css的魅力就是让我们前端工程师像设计师一样进行网页的设计,我们能轻而易举的改变颜色、布局、制作出漂亮的影音效果等等,我们只需要改几行代码,不需要借助任何软件,...

    前端达人
  • 史上更全的 MySQL 高性能优化实战总结!

      在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。

    芋道源码
  • 在苹果应用商店的17个应用程序中发现iOS Clicker Trojan

    Wandera Threat Labs研究人员发现有十多个iOS应用程序感染了Clicker Trojan(点击木马)恶意代码并在苹果的应用商店传播。其使用和安...

    FB客服
  • Quartus II和Nios II使用时遇到的错误及解决方法总结

    发现提示错误的器件是epcs,其实epcs是没有问题的。通过修改bsp的配置即可,Bsp右击-nios ii –bspeditor 取消选中所有选项即可。

    FPGA开源工作室
  • 快速地搭建“小直播”

    小直播 App 是一套开源完整的在线直播解决方案,它基于云直播服务(LVB)、即时通信服务(IM)和对象存储服务(COS)构建,并使用云服务器(CVM)提供简单...

    用户6575285
  • 天池中间件大赛 Dubbo Mesh 优化总结(QPS 从 1000 到 6850)

    天池中间件大赛的初赛在今早终于正式结束了,公众号停更了一个月,主要原因就是博主的空余时间几乎全花在这个比赛上,第一赛季结束,做下参赛总结,总的来说,收获不小。

    芋道源码
  • 史上更全的MySQL高性能优化实战总结!

    MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰。在进行MySQL的优化之前必须要了解的就是...

    用户5224393
  • 如何限定IP访问Oracle数据库

    各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:

    孙杰
  • App运营推广过程中,比较实用的工具

    工欲善其事,必先利其器,这个道理相信很多运营推广人员都知道。对于运营推广人员来说,修炼运营内功固然是最为重要的,不过在修炼内功之余,学习和掌握一些运营类工具则能...

    匿名_

扫码关注云+社区

领取腾讯云代金券