黑科技:使用AI和機器學習將Android項目秒變IOS項目

最近看Github,發現了一個剛出爐的黑科技:利用人工智能(AI)和機器學習(ML)技術將現有Android源代碼轉換成iOS代碼。目前支持Android項目中的資產目錄文件和UI佈局轉換,以及部分外部庫的轉換。有了這個神器,之後一我的就能夠輕鬆搞定兩個平臺了,真是爽歪歪啊。。。。我根本不須要學習iOS了。。。android


已支持的功能:

  1. Android的資產目錄 (如:jpgpng.9圖等) => "Assets.xcassets"
  2. mipmap目錄的圖片資源 => 「.appiconset
  3. Color形式的xml => 「.colorset
  4. Shape形式的xml => asset面板中的PDF
  5. Vector形式的xml文件 => Swift代碼 (CAShapeLayer)
  6. Animation形式的xml文件
  7. UI佈局的xml文件 => StoryBoard文件
  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這些控件類型的轉換。git

部分效果圖以下:github

CardView的屏幕截圖:swift

開關,ImageButton,ToggleButton的屏幕截圖:app

Button的屏幕截圖:機器學習

TextView的屏幕截圖:編輯器

使用普通鍵盤的EditText的屏幕截圖:ide

帶電話撥號鍵盤的EditText的屏幕截圖:佈局

佈局的轉換

目前支持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的屏幕截圖:

RelativeLayout的屏幕截圖:

FrameLayout的屏幕截圖:

ConstraintLayout的屏幕截圖(這個也作了移植,確實經驚豔到我了):

TableLayout的屏幕截圖:

ScrollView的屏幕截圖:

資產目錄文件的轉換

這一部份內容比較多,簡單的說就是把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設備的顯示了各類資產的使用狀況的屏幕截圖:


Android Studio佈局編輯器:

Xcode Storyboard編輯器:


Android Studio Asset資源圖片:

Xcode Asset 面板:


Android Studio .9.PNG 圖片資源編輯器:

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

Vector矢量圖的轉換截圖對比:

Shape xml文件的對比:

動畫轉換的對比:

Android iOS

事實上效果是同步的,只是錄屏和操做步驟不一致的緣由,看起來有些延遲。

外部庫Glide的轉換

支持的功能:

  • 從本地res文件夾加載drawable
  • 從URL加載圖片
  • 將圖片加載到UIImageView
  • 在下載過程當中提供佔位符圖片
  • 在圖片之間應用過渡:CrossFade,Flip
  • 支持圖片Transformation (變換)API:circleCrop(),centerCrop(),fitCenter(),centerInside()
  • 清除待處理的請求
  • RequestOptions類可在實例之間重用設置

待支持的API:

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

使用截圖:

計算器App

這是一個移植的計算器項目。

使用截圖以下,仍是挺酷選的呢,效果保持一致,操做也很流暢:


最後附上官網地址,有興趣的能夠去看看。

官網地址:www.reflectcode.com/

Github: github.com/ReflectCode…


關於做者:公衆號「Flutter那些事」,獨家放送最新Flutter、Dart和Fuchsia等技術動態,以及衆多原創,有技術深度的技術乾貨文章,還有Flutter實戰乾貨文章,等你來看,喜歡Flutter和跨平臺開發以及原生移動端開發的朋友們,趕忙來看看,歡迎你們關注。

相關文章
相關標籤/搜索