天天看點

從小白到獨立開發Android和IOS兩種平台app過程與總結

16年上半年在幫老師,幫外面随便做點東西以便得到些生活費養活自己。下半年去外面公司待了一段時間,然後選擇回來幫自己做個東西,曆時三個月,獨自完成安卓及IOS版本app的開發部分。

開發過程與問題

我之前沒了解過安卓和IOS開發,一開始對整個項目也沒什麼概念,腦袋中隻知道要做個電商app,中間就是遇到各種問題,後來一步一步的做下去解決掉。我做的是電商app。整個過程學習占了大部分時間,修複Bug,還有重構代碼。三個月大多數時間都隻做這三件事。

學習安卓,看郭霖的《第一行代碼》,再看點極客學院的安卓視訊,這是快速做東西的号搭配。《第一行代碼》我看了好幾遍,我買了好幾本安卓書,這本寫的最好,我看的最多。極客學院的安卓視訊,教的很淺,但是時間短,是以可以在短時間内知道一些安卓技術,然後結合第一行代碼,不同就翻閱,google就可以做東西了。

學習IOS,看小碼哥的ios視訊,不懂就看。ios開發的我沒遇到好書,關于Objective-C的,買本Objective-C的參考書就好了。

Android開發知識點

想要做一個完整的Android app,必須要會的東西。

  • Gradle 用來對安卓項目打包編譯,項目的依賴,簽名配置等。一個自動建構工具 (必須)
  • Activity,Fragment,ViewPager,ToolBar,BottomBar,Recyclerview。(必須) 這些要會用,了解的越深越好 (不同的App需要的元件可能不一樣,我覺得這幾個大部分的app都會用到吧)
  • Android的事件機制,事件的傳遞攔截等。
  • 布局控件,RelativeLayout,LineerLayout。一些布局的屬性都要掌握 (必須)
  • 網絡通信(我用的是Volley)(必須,一般app都要和背景通信吧)
  • 自定義簡單的控件 (有些内置的控件,可能無法滿足需求,需要自己定制簡單的控件)

個人感覺會了上面的這些東西,做出一個App一般是足夠的。

Android可能遇到的問題

  • ViewGroup和View的關系,經常出現childView alredy have a parent.you need to remove it's parent first.
  • Fragment的生命周期要了解的很深才行,不要以為看了google的官方文檔上面的Fragment生命周期就以為懂了,後來不斷的遇到問題,專門研究下會好點。
  • 布局過程也要深入了解下, 各種wrap_content,match_parent裡面是怎麼回事,布局檔案裡面的屬性到底是怎麼回事,要明白。

// 額外的工具庫,讓app變得更加強大

  • ButterKnife,這個很好用,用于綁定視圖,可以少寫不少代碼
  • GSON 将JSON資料轉換為JAVA的模型,或将模型轉換為JSON資料傳輸給伺服器
  • EventBus 這個庫說的是可以更友善的進行android元件之間的通信,可是我基本沒怎麼用到
  • SmartTabLayout 這個可以自己換成其他的庫,用于頁面滑動,增強版的ViewPager。
  • 推送通知用的阿裡的雲推送
  • 分享用的 ShareSDK

兩個多月,知識點學到了這些。這是做出一個完整的app需要的知識點。

IOS知識點

做完了Android開發之後,學習IOS,我的建議是先不要入門直接用Swift,當初我也是新手,徘徊要選Objective-C還是Swift得時候,聽說Swift是更加現代化的工業級标準語言,吸收了Python還有現代流行語言特性,學起來更簡單,我就首先學習的Swift,但是新手直接用Swift會出問題的。

  • Swift2.x和Swift3.x的版本不同,雖然是小的不同,但對剛學的新手,會讓新手産生迷惑
  • Xcode的版本一直在變,我按照蘋果官網給出的執行個體敲代碼都無法運作,因為蘋果官網給的執行個體程式是基于Swfit2.x好Xcode7.2的。 僅僅是一些小的版本差異,在Xcode8上就不能用。這對新手都比較緻命,直接打擊自信心。
  • Swfit的庫并不多,資料也不是很多,在我搜很多資料的時候,大部分都是Objective-C的,而且從書店買的書大部分都是Objective-C的,基于Swift3.x版本的書幾乎沒有。
  • 我在用Swift的時候無法使用阿裡百川的電商SDK接口,因為百川電商SDK用的是Objective-C開發的,大公司的IOS産品都是基于Objective-C開發的。

    ...

基于以上幾條,如果新手學習IOS開發,現在我的建議是先學Objective-C,雖然會多寫幾行代碼,但是資料多,有頭緒,Swift3.x的碰到了問題,資料就很少。

做出一個IOSapp需要掌握的知識點:

  • 掌握UIViewController。
  • 掌握常見的視圖,幾乎所有的視圖都是以UI開頭的,UIView,UILabel,UIButton,UIImageView,UITable,UIScrollView等等。
  • 掌握幾種常見的視圖建立于加載的方式。從代碼建立會麻煩,可以從XIB檔案建立視圖,從Xib初始化視圖和從代碼初始化視圖調用的初始化方法不同。
  • 掌握Foundation架構,幾乎絕大部分代碼都要用到這個架構裡的東西,裡面的東西就是在我們熟悉的類型前面加上NS,代表NextStep公司的意思,了解了這,記住NSString,NSArray,NSNumber等等就容易了。
  • 掌握自動布局,這個很重要,會自動布局才能在不同的手機螢幕下做适配。
  • Objective-C的文法知識,剛開始會用起來比較怪,後來就好了。

//額外的庫

  • MJRefresh 表視圖的增強工具
  • MJExtension 類似于Java的GSON,資料轉模型的。
  • Masonry 很好用的代碼自動布局庫
  • AFNetworking 網絡通信用的庫
  • YPTabBarController 頁面滑動效果用到的
  • Toast 類似于安卓的Toast,在螢幕的某個地方提示一條消息,類似于AlertView。

如果你曾先學習的是Objective-C,那麼兩個星期應該可以做出一個IOS app。一個星期用來學習Objective-C,一個星期用來動手寫代碼。

背景

我背景使用的是Laravel架構,優雅,簡單。主要用了Laravel的以下幾個功能

  • 掌握Request
  • 掌握Route,在路由檔案裡定義各種路由,由控制器處理
  • 資料庫的控制部分,Laravel有ORM還有普通的資料庫操作,我覺得普通的資料庫操作就夠了。
  • 中間件
  • Laravel的View部分,這個給非技術人員寫一些頁面以便非技術人員增删改查資料。這個要涉及前端了,好在我之前做過一段時間的前端。

Laravel是一個簡單的優雅的背景架構,很好用,很好學。如果你的伺服器用的是Nginx的話,那麼還要做一些額外的配置。

整個App基本上就這麼多東西,曆時三個月從小白到一個人寫背景,android ,ios端。創業團隊……

Android與IOS對比

Android的官方文檔非常全,語言隻有好用的Java。IOS的缺點是Objective-C用起來很奇怪,Swift的資料又不多,蘋果的官方文檔又是過時的。

Android要适配多個版本的機型,剛開始app就不相容低版本的Android app,後來7.0版本的App又有些不相容……,而IOS的不管幾s基本上沒問題,除了IOS的作業系統版本變化,我隻用了IOS 10的系統,其它的沒用。

Android的控件很多,用起來有些麻煩,剛開始會經常崩潰,IOS的控件隻有幾個,但是每個控件都封裝的很好,每個控件都提供了很多功能。

我覺得IOS學起來,開發起來更容易。

但Android用起來會更廣泛,Java也比較通用,Android開始開源的,我覺得android做精的話,會更有趣一些。

總結

迫不得已,未畢業之際,加入一個創業團隊,自己又不是科班出身,認識的搞IT的又少,隻能扯開膀子自己幹,學了三個月的時間,自己知識面上寬了不少,解決問題的能力強了不少,同時也意識到了一些問題。

做IT這一行,知識是學不完的,絕大部分問題都是類似的,你願意去找總能找到問題的解決方案,但是因為絕大部分問題解決方式都類似,Google,StackOverFlow,是以自身的進步隻在知識點上,解決問題就那幾種方法。

知識是學不完的,知識也都是類似的,但知識的深度也是無止境的。 有句話說過:知識的廣度和深度是相輔相成的,知識的廣度促進你往更深的方向挖掘,知識的深度又可以讓你融彙貫通到更廣的領域。

現在知識點不夠精是我的不足,但我不是那種蜻蜓點水到處學一點的人,我所學的東西都有做出成品出來。而且我是短時間内邊學邊做的。

路漫漫,東西做的不夠精緻,等于沒做,在一個創業公司,東西做的不好,對自己也是緻命的,不完完善優化……