Android 應用開發的難點是什麼?


在於:

你的產品對你說:

  • 這個界面怎麼沒有返回鍵,用戶要怎麼返回;
  • 點擊鍵盤之外的區域不會自動關閉鍵盤,用戶要怎麼關閉鍵盤(拿著腎六給你演示);

  • 什麼是Material Design,別說這些,我們沒必要替Google培養用戶的習慣;
  • Lollipop的適配先別管了,這台9100老是出現兼容問題你先看看;

你的設計對你說:

  • (拿出腎六劃幾下)這裡跟這個效果一樣就好;
  • 素材我就給你一套你縮放就好;

  • 什麼點九圖,這些技術活當然你來做;
  • 這裡怎麼比我的設計圖多了一個Pixel(縮放時無法出現小數點的像素),安卓端的體驗就是這樣變壞的;

你的測試對你說:

  • 在這台機子上有BUG(指著一部帶有滾動球的手機);
  • 在這台機子上太卡了(拿著一部通知欄有幾百條推送的手機);

你的安卓研發同事:

  • (下班了把安卓測試機放進抽屜,拿出腎六打電話);

  • 你的工資應該不低吧,怎麼還用安卓機;

然而,只有你是想做自己的安卓 APP才來到這裡的。

2015年8月12日 08:27:27 追加一下吐槽

1、首先Android開發要把APP風格弄得和IOS一樣,而這本來是設計的工作,結果Android開發要做很多額外的工作,而強行適配IOS風格,會有許多兼容性問題,也影響了APP的性能,這些額外工作都要Android開發來承擔,就連點9圖都要Android開發來搞,結果Android就在業務工作之外做了40%(保守估計)的工作。

2、產品要兼容非常低版本的Android系統,例如第一家公司的遊戲SDK要求兼容API4,試問這個版本的Android手機能跑幾個Android遊戲。Android 4.0以前的兼容性問題簡直是要命的,而產品就是不願放棄。

3、同一個產品,IOS的版本要發布APPLE STORE審核的,很多時候會審核不過,所以產品的版本一直是Android優先的,所以Android在開發新版本的時候會,會先於伺服器聯調,聯調過程踩的坑簡直是不要不要再多了,而但輪到IOS的版本的時候,這些介面基本是打通的,所以IOS的壓力會少許多。

4、IOS的同事都是公司發的MAC,Android就只能用PC,現在項目是在太大了,編譯一次項目要10分鐘,不能忍啊,但是要MAC只能自己買……

5、過於國內產品的尿性,就是不用Android常規開發,許多動態載入啊,SDK項目啊,導致了Android開發繁瑣了許多,許多時候產品只管能或者不能,不管代價。而IOS有的技術就算能做,也由於會被APPLE SOTRE封殺所以不搞。所以現在Android比IOS多出一堆業務,導致我們開發同事流失嚴重,但是公司招人要壓Android壓得很厲害,我在面試過程中發現的一些不錯的同事都被搞走……

6、老闆只關心APP上面看到的東西,比如登錄支付失敗,哪管是哪個環節出問題,對Android開發開口就是罵……


技術是沒有止境的,所以肯定會不斷有演進和難點。

一. 總體上

總體上我是贊成 @曹先進 的說法,Android 開發跟所有應用開發同理,底層和框架如何更好設計及優化以適應業務的高速增長

說起來很簡單,低耦合高擴展,做起來是需要長期經驗積累。

二. 我拋幾個細節難點

1. 插件化如何使插件的 Manifest 生效

2. H5 容器如何更好地優化和兼容

3. App 端優化,這是個沒止境的話題,網路、圖片、動畫、內存、電量等等

隨著優化的加深,你會發現不能局限在客戶端,服務端也需要深入。

SPDY 的優點併入 HTTP 2.0 你們有在測試或用嗎?

Fresco 出來前你是不是覺得圖片緩存已經到頭了?

Android App 為什麼整體流暢性總是被詬病?

……

三. 題外話

如果你覺得沒有難點或者難點在兼容、UI 之類問題上,那麼可能兩個原因:

1. 公司業務發展過慢,對技術的需求不夠迫切

2. 個人長時間在業務開發上,這個對於走技術路線的人來說挺麻煩的,不主動去接觸學習的話,n 年以後也還是這個樣子

為了更好的個人成長,這兩點都是需要注意和解決的問題。


最難的地方就是:官方網站被牆了……


產品經理沒有Android手機,算不


我總結android開發的難點無非就是2個字:折騰。

1.搭建開發環境折騰

下載JDK、下載Android開發IDE、下載各種版本的android SDK、配置各種環境變數。

模擬器太慢?嗯,下載一個Genymotion。

除了JDK其它都下載不了?嗯,去買一個VPN,找一個代理。

VPN買好了,SDK和IDE下載好了,想編譯一下源碼玩玩,嗯?需要linux?握草,下個虛擬機,下個Ubuntu,重新配置一個環境~_~。半個月過去,代碼還沒寫一行~

某一天,剛想進行gradle同步,出現SLL peer shut down incorrectly。一檢查你買的VPN被封了(例如xx出牆)。然後你上知乎、貼吧各種平台上面問:求推薦付費的穩定高速VPN? - 互聯網。嗯,假如問題不會被關閉的話,你才可能獲取到一個滿意的回答。

2.UI適配、版本適配折騰

各種android版本的系統導致了UI適配的難點,各個公司系統開發者的水平參差不齊,缺乏對應用開發者的尊重,只管實現不管開發者的調用。miui的喚醒對齊,魅族的SB,華為的隱藏式返回按鈕,oppo莫名其妙的內存回收,還有各種連軟加速都不支持的。

另外,大部分設計師加重了適配的難度,連dip、sp都不知道的設計師有大把的在。各種仿ios設計,各種產品經理、設計師甚至老闆認為ios天生驕傲,自然美幾分。他們對android的認知還停留在android2.3的地步。話說某一次我建議設計師使用MD方式來開發android app,被設計師回復:MD設計沒性格。然後給出各種著名的App來證明很多大公司都沒採用MD設計。我回復:apple music for android使用的是MD。然後就不說話了,頗有種「人可以被毀滅 但不可以被打敗」的壯烈。

版本適配主要是指API介面的適配,android版本的快速迭代,出現了各種兼容包v4、v7、v13。我印象最深刻的是一個關於webview的http和https的混合請求的,在API&>=21的版本上面默認是關閉的,在21以下就是默認開啟的,直接導致了在高版本上面http請求不能正確跳轉。

if (Build.VERSION.SDK_INT &>= 21) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW );
}

類似問題的還有很多。

3.各種市場,版本回收慢

android若干個市場,每次發布版本光打包都要半個小時,還要對某些市場做一些特殊的處理,什麼360市場要求首頁不能一進入就彈窗、什麼網易市場上傳成功沒有及時更新的問題等等。還有android版本回收超級慢,一個bug修復後,過幾個月你還能在後台檢測到該bug的錯誤信息。


產品的意見不統一,一個向東一個向西,把程序員在中間當猴耍。


難的不在技術,而在於你對整個團隊(包括開發,設計,產品)認可么?只有認可了你的產品,認可你的團隊,你總會想盡辦法,投入激情去把她做的更好!


人家問的是應用開發,結果下面的回答的是適配,適配只是其中之一,其實個人覺得並是不最難的。應用開發最難的其實跟一般軟體開發沒有區別,如何保持程序的擴展性和架構的彈性,如何適應需求的變化,這個才是難點。


連SDK都牆了,你說難不難。


感覺難點在與熟悉SDK各版本關鍵API的歷史和特點並能熟練應用

熟悉關鍵類如looper,handler,surfaceview等關鍵類底層的運作與實現

其他就和一般工程一樣了,做好什麼架構,模式,內存管理之類的


兼容,聯網,性能優化


從我自己短暫的開發經驗來說,技術上android並不很難,買一兩本書,裝個eclipse,做幾個常式就可以了。但與技術相關的其他方面是比較難的,比如:

1.界面設計:手機或平板的程序,界面是一個關鍵。如何設計好看的界面,如何讓界面適應不同的機型都很重要的。

2.維護:android系統的更新總是很快,而且不總是向後兼容的,所以設計一個程序並不難,如何讓它適應不同版本的os是有難度的。

3.高效率:android的程序如果只是寫出來可以運行,是很容易的,但如果讓其高效、魯棒,還是需要下很大功夫的。

4.莫名其妙的問題:開發過程中還偶爾出現某個解決方案對某個版本的os可行,對某個版本的os不可行這種莫名其妙的問題……


最難的就是android設備種類繁多,各種適配與兼容問題。完了流暢性還沒有iOS好,各種費力不討好。


最難的是如何用一周時間做出別人兩個月才能做出的東西


做了這麼多年android開發,我覺得android是越學越難,東西根本學不完,最噁心的就是屏幕的適配,和項目大了各種內存問題,屏幕適配,優化內容,各種效果。


做開發自然離不開官方文檔,官方文檔是獲取知識的第一手資料,但是做安卓開發的必須要通過「某種手段」才能看到,這就讓很多人無法獲取到最新最準確的知識。開發者博客往往有demo,開發者論壇可以提問題找答案,這些都是幫助開發者快速實現某些功能點最好的工具,但是很多同樣地被屏蔽掉。至於無法更新sdk,無法更新Android Studio就不用說了,每天都可能遇到,遇到了就心塞。

讓人不爽的還有模擬器,啟動速度那叫一個慢。

即便有個很好的替代版genymotion,也需要代理才能下載虛擬系統。

還有安卓Sdk中的相冊介面,和ios系統比起來差多了,開發者不得不使用第三方的庫才能實現相冊展示,選擇本地相冊等功能。雖然自Kitkat起引入了SAF框架,但是兼容性是個問題,那些適配4.0以前系統的開發者傷不起。

還有就是屏幕尺寸碎片化太嚴重,需要花更長時間來做適配,重複低級的工作會讓人變傻。

還有動畫,設計師出效果圖基本都TM依蘋果為依據,你們不知道安卓系統不支持gif動畫嗎,不知道很多ios上的動畫在安卓上做起來很累嗎?

不知道鍵盤啥時候出現啥時候隱藏沒有統一的監聽介面嗎?

但是安卓開源,開源,開源。

愛之深,責之切。


實現功能一般情況下並不難,難的是你代碼的質量過硬,能適應以後需求的變動!


安卓好多都是模仿IOS 不得不說開發的時候 IOS慢一些(審核慢) 安卓以IOS為主 盡量和他一樣 在就是後期集成上線調BUG的時候費勁點


難在沒有充足的時間和金錢給你實現他的需求。


心態好才是難點!


推薦閱讀:

三星 Note 7 的自燃事件會對三星造成怎樣的影響?
有哪些 Android 上比 iOS 上更優秀的應用?
三星S6edge、iPhone6plus、華為mate7和一些其他品牌的旗艦機哪個更值得入手?
iOS的消息推送機制到底是怎樣的?
droidBooster 為什麼能夠十倍加速 Android 設備的性能?

TAG:移動應用 | Android開發 | Android | 移動開發 |