發表文章

Android error: Unsupported class file major version 60/61

圖片
最近如果大家有build android app,常會遇到此問題: android studio / app build issue: 所有舊專案都很會出現這問題,我也是一直遇到.大家可能會被這氣瘋了吧. Apk 無法產生出來.還不知道原因在那??? Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during semantic analysis: Unsupported class file major version 60 java.lang.IllegalArgumentException: Unsupported class file major version 60 at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:196) at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:177) at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:163) at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:284 Solution: 因為最近有很多android新的軟體版本更新,所以很多相關軟體也都更新, 嘗試升級Gradle的版本解決 更新方法: 打開File -> Project Structure -> Project,在窗口中的左邊,可以修改Gradle為7.2以上版本 modify gradle-wrapper.properties to: distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip ----- 2021.9.台灣在疫情下,百業蕭條,大家都被限制在家裡防疫 但不知為何台灣股市還可以上17276點,現實情況明明就整個台灣人民都過得很苦, 不僅如此,因為

寫APP真的是好工作嗎? Firebase host與我對Kotlin的感想

圖片
最近在找工作,經過1個多月後,還是沒找到,有點不順利,收到很多無聲卡, 難過了好幾天,然後我感覺.... 1.寫APP真的是好工作嗎? 台灣好像不缺app軟體工程師....(現今在網路上或補習班,能找到大量手機 App 或網頁之類的前端開發課程。但一套應用系統,需要前端與後端整合才完整。很多資深工程師(well-trained)像我,不得不必須要跟新人競爭,但通常公司不太會分辨何謂新手與老手?) 2. 感覺上,IOS工程師似乎比ANDROID 工程師更稀少與缺乏,更好找工作. 3. Covid-19疫情風暴下,能不能去面試都是一個大問題. Delta 變種病毒來勢洶洶,如果去台北面試時中途被感染,可能又會害到面試官跟自己.... 4.竟然還有公司開app工程師4萬多的薪水,好多雇主都不懂行情啊~一位app工程師多難培養阿,要賺四萬多薪水我還不如去作一些不需要如此花費腦力的工作.薪水雖低一點但不用像app工程師寫程式寫到累的半死.... ----- about Kotlin  Kotlin Playground:   https://developer.android.com/training/kotlinplayground 現在找工作android都要求Kotlin, 但其實Kotlin造成更多混亂... 混亂1: Java 8現在也支援lambda與很多其他新功能...不會比Kotlin差 混亂2: android 工程師需要會java外,又要多學一套Kotlin,當然有時還要會swift/ios, dart/flutter, 基本的c/c++也都要記得. 腦容量不足.目前在google的android官方文件範例中,已經可以見到這種兩種語言並行時產生的混亂,每個重要功能的解說範例,變成需要有java的example, 也需要有Kotlin的範例,缺少任何一種,都會導致對方的擁護者抗議. 這在Stack Overflow上更是產生極多的類似抗議. 混亂3:  在開源社群中 GitHub source code 多了Kotlin分類, 導致原來java的open source 感覺低人一截,開發者對於要開發新版本時,不知道要用java還是Kotlin.....導致open source原始碼產生分支,不統一. 由Kotlin編寫的open source,對原有的j

Flutter: 設置APP版本與構建版本的注意事項,與第一個自己設計的flutter塔羅牌app上架了

圖片
當一個Flutter APP開發完成,我們要打包發佈到App Store和google play store,這時候我們需要設置APP的版本號。 android:   build.gradle file (inside app folder), 但在flutter中,我們不要直接去更改的這邊設定,因為flutter有定義正確的更改方法. defaultConfig { applicationId "xyz.markapp.mytarot" minSdkVersion 16 targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } ------- Version name and build number At development time, you can easily find the version name and build number of a Flutter project by inspecting  pubspec.yaml .  Here is an example:  version:   1.0 .0 +2 in the case : the  version name is  1.0.0   and  the  versionCode  /  build number is  2 . ps:  versionCode  在app上架時,不能重複,所以會1.2.3.4.5...一直加上去. --- 然後,學了半年多flutter, 終於第一個flutter app上架到google play app store. google play app link: My Tarot . ios app store app link: My Tarot Card 上架成功,值得慶祝. ----- ps: ios app icon 規格: 現在ios app icon有新規定,1.png 2.不能有透明背景 不然的話會無法上架. --- 大家不要小看這個簡單的app,畢竟這是完全我自己設計的第一個flut

2021.8.8. app 創業夢碎

圖片
經濟部中小企業處創新諮詢服務中心統計資料,台灣新創企業1年內倒閉機率達到90%,另外存活下的10%在未來5年還會有90%的機率倒閉,不過這裡指的是新創,軟體新創不確定(應該更慘). 最近因為COVID-19疫情關係,創業夢碎. 2015.五年前因為受到郭的鼓勵,我跟銀行貸款並辭職出來闖闖看. 一場誤會,卻造成我辭職出來創業。 中間有一段時間還真的以為成功了.每天努力設計app,研究app相關的技術,日子比在公司上班還累,完全自主。雖然不用每天通勤趕上班,但辛苦程度不比上班累.因為你去公司上班,每月月初公司都會準時付你薪水,但自己創業,錢是要自己賺的,每天煩惱如何提高生產力,如何賺到錢?都是一個大問題.剛開始創業時,為了提高專心度,跑去麥當勞寫程式,跑去圖書館寫程式,都因為會被打擾的問題而痛苦不堪,但是在公司上班時就沒這問題,公司的環境很單純,這可是自己出來創業所沒法提前想到的問題. 但2020,2021時, app這邊收益實在慘不忍睹.導致我所有現金都花光了. 還不夠付生活費.走投無路,只好放棄,出來再開履歷找工作看看. 其實是這樣的,回想過去五年,我不後悔出來創業,也許他當時對我們所說的事是對的.我還記得當初郭對我所說的一些話,我聽到後就立刻馬上決定排除一切就出來創業. 但創業需要很多因素,不是只有熱情就可成功. 創業有三個坑: 1.研發坑: 研發新技術是無止境的,永遠有學不完的新技術,如何把技術用在產品上. 是每一個創業者要積極面對的問題,正所謂學如逆水行舟,不進則退. 2.資金坑: 各種費用如潮水般飛來, 薪水,伙食費,研發設備費,生活費,水電,aws主機費,網路費,app開發者年費.... 3.生產力坑: 自我管理是很重要的,自己創業因為沒人管,很容易就虛度一天,所以設定OKR目標,策略的訂定就極為重要.每日進度追蹤. ---- 後來想想,郭對我們所說的,也許放在他身上會成功,但換到其他人身上就不一定. 我們這些曾參加過三用的人聽了一些激勵的話,就辭去工作,仔細想想實在是不太對的事.太衝動了. 吐血了的襯衫 (略)   ----- 創業需要的五個因素MILES: M = 財力(Money):你擁有的資本,或你可以募集到的資金。 I = 才智與洞見(Intelligence and Insight):學習力、社交智商和情緒智商,以及創

Flutter: 10個必學的元件範例

圖片
前置作業: 更新dart版號: (因為default hello world 是2.7.0會導致錯誤) To fix these errors, you will need to enable null safety. Open pubspec.yaml file in your project. You will find following setting in that file. environment: sdk: ">=2.7.0 <3.0.0" In Dart language documentation, you will find statement Sound null safety is available in Dart 2.12 and Flutter 2 . You can change setting in pubspec.yaml file to use Dart 2.12 and not 2.7. Following is updated file. environment: sdk: ">=2.12.0 <3.0.0" 來開始寫幾個必須要做的範例:  ---- 1. BottomNavigationBar  link: https://api.flutter.dev/flutter/material/BottomNavigationBar-class.html 額外要知道list的取值方法:  _widgetOptions.elementAt(_selectedIndex).

admob eCPM floor Setting

圖片
寫app感想: 目前正在趕工學習Flutter: Write less, do more. 但要學的東西太多,根本學不完。光是設計與瞭解下面flutter簡單的畫面,就花了我很多時間.   我實在感到寫app真不是人幹的工作,除了要會ios, android雙平台,還要會後端,伺服器管理.然後新的東西又一直出來(例如go, flutter, kotlin....等),真不知道有人那來的勇氣說寫app很簡單的.... 接下來,來說說正題. admob 最近多了新功能 eCPM floor : ps: eCPM ($ USD) :(Effective cost per thousand impressions. An estimate of the revenue you receive for every thousand ad impressions. eCPM is calculated as (Total Earnings / Impressions) x 1000 .  ) eCPM floors, also known as minimum eCPMs, instruct the AdMob not to serve ads to that ad unit that are below the minimum eCPM you've set. You can set AdMob eCPM floors in the settings of individual ad units   這新功能真是複雜, eCPM floors可以設定: 手動指定一個值,或讓google自動去競標最佳化值.  主要是檔掉一些出價太低的廣告.因為的確有廣告主不願意出太多錢,而設定很低的廣告價格.那這樣我們辛苦設計app,好不容易帶來的流量就便宜他了. 這裡沒人會想要手動指定一個值,因為設太高或太低都不對,而且我們並不知道目前正常的eCPM普遍值是多少?我們需要的是讓google自動幫我們去用機器學習的方式幫我們去競標,找出最佳值. How Google optimized works Google optimized sets a collection of dynamic floors based on your users' geographic loca

Flutter: JSON Parser example

圖片
Flutter的Json處理真是有夠難... 看了老半天還是看不太懂, 挫折感重重. 他有兩套方法一個是dart內建的 dart:convert ,另一個是套件,其號稱較容易處理複雜的JSON結構. === 一個外國網友說:  I have to admit, I was missing the gson world of Android after working with JSON in Flutter/Dart. When I started working with APIs in Flutter, JSON parsing really had me struggle a lot. And I’m certain, it confuses a lot of you beginners. by Pooja Bhaumik 大家可以去讀這篇json parse in flutter文章 ps:額外閱讀: 30天Flutter手滑系列 - JSON與序列化(JSON and serialization)  --- Is there a GSON/ Jackson/ Moshi equivalent in Flutter? The simple answer is no.  似乎是因為 程式庫 反射(run-time reflection)的關係,使得Flutter 無法對其做檔案最小化.  ---- 在android我們用gson太久,太方便,所以被寵壞了. 一換到flutter後,沒有gson,我們就不會用了. 寫程式這種技能,就跟啃饅頭一樣,很簡單,但你還得一口一口慢慢啃完. 對,沒有自己寫出一段json parser範例code,你就是算不會他. 一定要自己寫出來,結果有跑出來才算,然後在熟習其用法.等到真實專案遇到了就不會害怕. --- Flutter有內建 d art:convert library可用來parse JSON. "為較小的項目使用手動序列化數據",但這是一個很基本的library. Basic JSON serialization in Flutter is very simple. Flutter has a built-in dart:convert library that includes