文章

如何解決Android studio build code時間過久(How to solve Android Studio spend much time for debug build)

圖片
Android在開發的過程,都會經歷多次的debug build來安裝在手機上看執行的結果 然而在經歷了多次的build code之後, 是不是會覺得越build越久? 有時甚至是按下了build,到完成安裝到手機run起來都要6分鐘以上... 因為實在太不合理了,所以這個時候可能已經開始上網去找Android studio加速之類的方法了 常常找到的結果都是叫你把Memory調大、啟用新一代Dex編譯器...之類的方法... 但是如果你跟著照做,但build code還是一樣越來越慢,有可能是因為Java的關係 這個時候可以試著強制把Java關掉的方法來試試看 1.開啟活動監視器 2.關閉Java程序 把所有在活動監視器上看到的Java程序都按下停止的按鈕, 然後再去Android studio按下build, 就會發現瞬間build code的速度又變回剛開Android studio時的速度了

如何與接案工程師聊報價?

圖片
Photo by:  https://pixabay.com/photos/work-typing-computer-notebook-731198/ 接案這些年來,收到過無數的案主要求報價, 很多都報完價之後就沒消沒息,沒再談後續的事了。 可以理解有些客戶可能會覺得報價太高,也能體諒消費者的立場總是會希望便宜一點, 所以想來談談關於我們App個人接案工程師對於報價是如何評估的 其實對於接案報價的高低,我個人會由幾項原因進行評估: 難易度 工時 交期 規格是否明確 風險 一、難易度   也就是說這個案子是否用了什麼比較難的技術? 是否限定了只能使用什麼程式語言撰寫(而剛好這個語言我個人剛好比較不熟悉)? 這些功能在某些平台(Android、iOS或是後端API)會比較難處理? 客戶的需求是否會有可能讓app上架無法通過審核的可能? 二、工時 也就是說完成這個案子需要多少的時間才有辦法做完。 有些案子雖然技術不是很難,但要實作的頁面實在太多,或是要判斷的邏輯太復雜,就會造成這個案子的總工時會變長。 三、交期 也就是這個案子的交件日有多久時間可以寫?是不是急件? 如果是急件而手頭上又在其他的案子在忙的時候,要將新的急件排入當然就會比較貴,就好比去照相館沖洗相片一樣有急件與普通件不同的價格。 四、規格是否明確 這項是最為重要,但又是最難的部份。 最常遇到的情形就是「我想要做一個App,跟某個現在已經很知名的App一樣的功能,Android跟iOS都要,幫我報個價」 這個時候我需要去了解的事情就是: 客戶說的那個App有哪些功能? 客戶要的App要有哪些的業務邏輯? 客戶有沒有提供美術設計圖稿? 客戶有沒有提供後端API?(後端API是app的資料來源,通常也是客戶最容易沒考慮到的部份) 於是我如果接到了這個案子所要花的時間就是: 1.需求分析 2.Android app開發 3.iOS app開發 4.基本的美術設計 5.後端API開發 上面的5項,其實剛好也就是一般軟體開發公司會出現的職缺: 1.SA(系統分析師) or PM(專案管理者):需求分析 2.Android工程師:Android app開發 3.iOS工程師:iOS app開發 4.美術設計師:美術設計 5

如何解決Flutter專案在不同電腦開發時造成無法build的情形?

圖片
如果你在不同的電腦進行開發Flutter專案,雖然是同一包程式碼,但當在不同的電腦要執行run debug的時候,有時候會無法執行並出現了下列的錯誤訊息: This package referenced a Flutter repository via the .packages file that is no longer available.  如果在繼續往下看錯誤訊息,其實會看到IDE告訴你這台電腦正在使用的Flutter SDK路徑與專案內所儲存的Flutter SDK路徑不一致。 解決的方法就是把Flutter專案底下的.packages檔案刪除後 再執行指令: flutter pub get 如果是使用Android Studio開發則可以從「Tools/Flutter/Flutter Package Get」 然後你的Flutter專案就又可以正常執行了。 Reference: https://github.com/flutter/flutter/issues/21435

如何在Mac建立Flutter開發環境

圖片
這篇是以Mac搭配以Android Studio做為開發環境的說明文章 1.到 官方Flutter SDK 下載SDK 下載後預設會是在~/Download底下 下載後的sdk是一個zip檔,所以先建立一個要放置Flutter sdk資料夾,假設在「我的文件」下建立一個名為「sdk」的資料夾 接著切換到sdk目錄底下 指令:  cd ~/Documents/sdk  2.解壓縮 假設從官網下載的版本為: flutter_macos_v1.7.8+hotfix.4-stable.zip 指令:  unzip ~/Downloads/flutter_macos_v1.7.8+hotfix.4-stable.zip  此時會開始進行解壓縮... 於是在sdk資料夾就會出現解壓縮後的Flutter SDK 3.加入環境變數 開啟設定檔 指令: 如果你是用bash:     vi ~/.bash_profile  如果你是用zsh:   vi ~/.zshrc  在設定檔內填入下列路徑  export PATH="$PATH:/Users/使用者名稱/Documents/sdk/flutter/bin"  於是Flutter的sdk就已經建立好了 4.在Android studio加入Flutter Plugin a.打開偏好設定(Preference),可以從工具列的「IntelliJ IDEA/Preference」或是直接按下「command + ,」 b.搜尋「plugin」,找到「Flutter」,按下「install」 接下來會提醒你也要安裝Dart語言的外掛,按下Yes 安裝完後會要求重啟Android Studio。重啟之後進入「Preference」設定Flutter SDK的路徑 將路徑設定為原本放置sdk的路徑,例如: ~/Document/sdk/flutter 如果路徑指定正確的話,也會同時顯示Flutter的版本 設定Dart SDK的路徑 一樣是在「Languages & Frameworks」的項目下,找到Dart,將路徑設定為Flutter SDK目錄下的bin/cache/dart-sdk 例如:~/Documents/sdk/flut

Gson發生錯誤訊息: JsonParseException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT

圖片
這個算是剛開始用Gson的時候很容易發生的問題, 這個錯誤訊息是在告訴你:API 回傳的結果是JSON的Array結構,但你的程式卻寫為處理Object結構。 首先看一下你的API回傳的格式,以下列的API為例: https://jsonplaceholder.typicode.com/users 回傳的結果為: 從API的回傳結果可以看得出來,最外層是用Array包住,所以如果程式如同下列使用Object包覆的方式撰寫, (下列使用Kotlin的語法撰寫, response為API回傳後的結果) val gson = Gson() val type = object : TypeToken<UserGson>() {}.type val user = gson.fromJson<UserGson>(response,type) 就會出現 JsonParseException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT 所以只要將程式改寫為用ArrayList去包住Gson的資料物件,即可解決這個錯誤 val gson = Gson() val type = object : TypeToken<ArrayList<UserGson>>() {}.type val users = gson.fromJson<ArrayList<UserGson>>(response, type) 範例程式碼: https://github.com/ukyo99999/gsonexample Reference: https://github.com/google/gson/blob/master/UserGuide.md https://stackoverflow.com/questions/9598707/gson-thro

如何在Mac架設Gitlab (How to install Gitlab using Docker on Mac)

圖片
1.下載Docker Desktop for Mac https://hub.docker.com/editions/community/docker-ce-desktop-mac 2.安裝Docker Desktop for Mac a. 將下載後的Docker.app拖曳到Application資料夾之後即可完成安裝 b.安裝後第一次開啟時,會要求輸入使用者登入密碼, 之後就會自動完成安裝與啟動Docker服務 c.啟動完成後,可檢查已安裝的docker版本,如果可以正確顯示版本號碼,表示已安裝完成 ,打開Terminal輸入指令 指令: docker -v 3.下載Gitlab的docker image 官方下載頁: https://hub.docker.com/r/gitlab/gitlab-ce/ 這個頁面,其實是要你使用docker指令下載這個image, 所以打開你的terminal,輸入以下的指令 docker pull gitlab/gitlab-ce 下載完成後可以使用指令查看下載後的內容 指令: docker images 4.啟動container 把port從80改成你要想開啟此服務的port,假設為8787 將名稱改成你要的,假設為gitlab 指令: docker run --detach --publish 8787 :80 --name gitlab gitlab/gitlab-ce:latest 檢查container是否已啟動 指令: docker ps -a STATUS的health: 會從starting,變成Up 2 minutes (healthy),就表示已啟動Gitlab這個container成功了 5.開啟Gitlab 在網址列輸入: http://localhost:8787/ 由於初次開啟,所以會自動導入變更密碼頁面,此時只要輸入你的新密碼之後即可開始使用Gitlab了

如何在Facebook開發者後台(Facebook developer console) 使用Google Play代管的key

圖片
有時候開發者會發生過將之前打包apk的key遺失而再也無法上架到Google Play的情形,於是Google後來開放了新的功能:「 由 Google 管理及保護您的應用程式簽署金鑰」 如果你選擇了使用這項功能,則Google play會產生一組key,然後將開發者上架到Google play的apk裡面的key換掉重新簽署。 這樣的好處是,之後開發者就不用再擔心key遺失,等於是Google幫你代管,而且如果你是做App外包的人也很方便,不用幫客戶保管key。 但是因為在開發Facebook api相關的app的過程時,需在Facebook developer console填寫「 開發密鑰雜湊 」,而你很有可能在之前的過開發過程已經簽署了自己做的key(或是Android 內建的debug key),為了debug你可能就已經有在Facebook開發者後台就加入了debug key的SHA-1,所以當你使用「 由 Google 管理及保護您的應用程式簽署金鑰」 的功能時就 會造成facebook無法登入的情型發生。 解決方法 1.開啟Google play到下列的路徑: Google play console/應用程式簽署, SHA-1 憑證指紋, 2.開啟Terminal key入下面的指令 echo [SHA1] | xxd -r -p | openssl base64 例如: echo 19:00:39:0D:4E:C5:87:3F:B5:E4:7A:45:45:BA:C4:25:C9:40:F6:D1   | xxd -r -p | openssl base64 3.將運算出來的結果復製到Facebook開發者後台貼上