跳到主要內容

文章

Android 10 open failed: EACCES (Permission denied)

android targetSdkVersion 2929後開始save data to download資料夾會有問題喔~
快速解法: out of scoped storageIf your app is not ready for the changes that are coming in for Android 10 then you can 「opt-out」 by setting the flag requestLegacyExternalStorage to true in your manifest.<manifest ... ><application android:requestLegacyExternalStorage="true" ... >
...
</application></manifest>設定完之後:就解了!
 以上是快速解法,若想使用完整正確android 10的方法,請參考:https://medium.com/@sriramaripirala/android-10-open-failed-eacces-permission-denied-da8b630a89df

app bundle and bundletool. 關於aab安裝問題

google 有說明年開始強制使用app bundle.不然不准更新app.但是產出的apk不再是apk了,而是aab.C:\release>adb install 6.aab
Performing Streamed Install
adb.exe: filename doesn't end .apk or .apex: 6.aab
不能透過adb install....
so, google 發表一個新tool: 去download bundletool...因為是java跨平台都可執行.
https://github.com/google/bundletool/releasesYou can extract the apks files from the aab file using the bundletool command.https://developer.android.com/studio/command-line/bundletool
To generate an APK set for all device configurations (signed with a debug key) you can use: bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
To deploy your app from an APK set, use the install-apks bundletool install-apks --apks=/MyApp/my_app.apks
test:C:\release>java -jar bundletool.jar build-apks --bundle=6.aab --output=out_6.apks
INFO: The APKs will be signed with the debug keystore found at 'C:\Users\mark\.android\debug.keystore'.
還是失敗,還要指定key才可以... For Release apk command,

example 1:
bundletool build-apks --bundle=/My…

app DAU

What is DAU? Daily Active Users (DAU) measures the number of active users who visit your app in a single day. 每日啟動並使用APP的不重複USER數量.很重要.在Firebase 控制台可看到.
像上圖,就是這3個app總數DAU=1013人.
What is MAU? Monthly Active Users (MAU) measures the number of unique users to your app over a 30-day period.每月啟動且不重複user,這個我就不知在哪裡看了...
但是DAU非常重要,台灣2300萬人,如果DAU只是不到10000人,那真的很難看.

寫APP是孤獨的事情,跟AdMob violation: Site Behavior: Navigation的解法

1.最近又被google admob發警告函,無奈.. 還是一樣重點是admob說如果太多違規就會被停帳號,真是把我嚇死了. 但是他們判違規卻不跟我說app那裡違規了? 要我自己去找...於是就變成我要在眾多app頁面中自己判斷哪裡違規?
這真是勞民傷財,於是我就不能專心開發app,要花很多時間去找錯誤在哪裡?

有個違規是這樣,找附近功能因為有用google map place api,而他們最近改了json spec設定 "id"--> "place_id" 於是我的app就出問題了. 然後admob就發違規給我了.
無奈.一個人慢慢地修,孤獨的修app....總之,google admob好像跟我有仇似的,一直找我麻煩.現在我一收到admob開頭的信,我就會害怕.
簡單講:
AdMob violation: "Site Behavior: Navigation" Policy Violation - solution
 就是如果你收到這個違規:那就要檢查你app所有button/menu item與連結,不能有忽然地引導user跳出App 動作.必須要提醒user.才能跳出去app.因為你app內可能的錯誤太多,所以admob不跟你講那裡違規,因為Admob審查人員無法為你一一檢查.所以發這違規.像下圖: 按下這transfer會跳到google translate...但是沒有提示使用者.就是違規.因為有些人的手機沒裝google translate.會有錯誤訊息出現.





2.google play 審核的擔心與害怕
上次因為一個app有用到一個library.APK還要符合x86, X64, ARM64, 32Bit.. 導致app就被退回.現在  x86 很少用在手機平台了,但還是一樣不能忽略.不得已X86版本Library只好移除,剩下ARM 32, 64 即是 arm7, arm8.總之,就是寫一個app在上傳apk後不是就沒事了,還是要擔心害怕被Google play駁回.
當然除了GOOGLE play會駁回的風險外,apple app store也是有同樣風險,而且更嚴格.

------

3.再來看看下圖: 多出一片空白,很明顯是廣告位置錯誤.
因為admob判我違規,所以廣告停止放送.但這樣也造成開發者問題,…

(台灣)中華郵政新制郵件 3+3郵遞區號(6碼郵遞區號) app

android: https://play.google.com/store/apps/details?id=com.mark.taiwanpostmailbox ios: https://apps.apple.com/tw/app/id1524433635
android平台:





IOS App:


中華郵政公司日前表示,現行郵遞區號編碼「3+2」不敷使用,為讓郵件投遞更順暢,預定今年三月起,採用「3+3」新制,未來信件地址就算有缺漏,也能增加找到正確收件地的機會,加快準確投遞。
為提升郵件處理效率,中華郵政公司自109年3月3日起實施新制「3+3郵遞區號」, 前3碼「行政區編碼」維持不變,後3碼「投遞區段碼」由原來之2碼增為3碼, 詳盡規劃投遞區段,簡化處理作業,並增進郵件分揀效率,提高投遞準確率。
郵遞區號為配合機器分揀郵件及便利收件的一種地址編碼制度, 中華郵政公司自80年2月1日實施「3+2郵遞區號」,迄今已多年。
中華郵政呼籲社會大眾配合此項新措施,未來交寄郵件請書寫「3+3郵遞區號」,便捷郵件分揀處理,迅速送達。

2020.07.設計app感想

1.App:目前遇到很多問題,即使我目前app每天的使用者還蠻多的,大約全球有安裝我的app且活躍用戶有5萬人,但因為我都是設計免費app服務大眾,但admob給我的廣告收益實在太低了,連吃飯錢都不夠.生活無以為繼. 然後google admob policy team又一直找我麻煩,ios上我有個寵物認養的app,明明沒有違規,但他一直判我違規,申訴多少次都沒用,我實在找不到哪裡有問題,寫信給他們希望能澄清一下問題在哪?但admob都不願回覆,這真是非常差的服務,怪不得很多app開發者都建議轉到其他家,admob實在是太大家獨佔了大部分市場了,所以一直不斷的霸凌開發者。只能嘆一口氣,無奈。
2.app廣告放置問題: 其實我很感謝大家使用我的app,所以我一直不願像其他app開發者一樣,頻繁使用全螢幕插頁廣告,這實在是干擾使用者,我只用banner,希望在不影響使用者體驗下放置廣告,但這banner收益實在有夠低,且user其實都不太願意點擊,很常時候都是誤按,目前誤按在google強大的偵測機制下,都會被算作無效流量,是不會算錢的。我又不願意把app變成都是全螢幕廣告,點一下就跳出廣告那樣討人厭,所以可想而知~我的處境會有多慘,非常慘!!!!
3.apple mac book pro越來約貴: 設計app需要好的電腦設備,但目前因為沒錢,無力更新開發設備,看著舊電腦,設計app時已經感覺他慢慢跑得很吃力,cpu always 100%...我實在感到無助,買不起新電腦。


4.安東青創基地欺負創業者事件: 最近遇到這件事實在很生氣,只能說中原大學實在有夠爛, 派出這種經營團隊,不僅欺負創業者,羞辱新創,一段日子後還毫無改進的意思。 我建議桃園市政府以後千萬不要再與中原大學合作。 市民使用公有設施乃市民的權益, 就跟圖書館允許大眾使用一樣。 但目前中原大學在管理安東基地時,對創業家態度有夠差, 還把這當他們家私產,隨個人喜好任意驅逐新創。 鄭文燦又不管,小蝦米無法對抗惡霸,我只好無奈嘆一口氣。

最後, 這世上也沒有錢人願意資助我創作app.實在無法再繼續設計app下去。 我也不知道下一步怎麼辦。 只能說獨立設計app不是一條好走的路。

Android studio gradle error: Duplicate class com.google.protobuf...

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> 1 exception was raised by workers:
  java.lang.RuntimeException: Duplicate class com.google.protobuf.AbstractMessageLite found in modules jetified-protobuf-javalite-3.11.0.jar (com.google.protobuf:protobuf-javalite:3.11.0) and jetified-protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
...
  Duplicate class com.google.protobuf.LazyStringArrayList$ByteArrayListView found in modules jetified-protobuf-javalite-3.11.0.jar (com.google.protobuf:protobuf-javalite:3.11.0) and jetified-protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
  Duplicate class com.google.protobuf.LazyStringArrayList$ByteStringListView found in modules jetified-protobuf-javalite-3.11.0.jar (com.google.protobuf:protobuf-javalite:3.11.0) and jetified-protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
  Duplicate class com.google.protobuf.LazyStringList…

寫app真的是好選擇嗎?

最近因為admob收入大減,加上covid-19影響,百業蕭條,大家都縮減廣告行銷預算,自己又沒其他正職工作,專心設計app.(設計app超級累的)
但自己連房租都繳不出來, 感覺自己超可憐的。 今天為了省錢,只好去7-11搶快過期的7折便當來吃, 我都不好意思跟其他人講, 默默地難受著, 也不敢回家見爸媽,不敢打電話,把自己完全消失,因為沒錢給他們,只能叫他們自己想辦法,唉呀! 怎麼這麼慘啊,我也不知道為何會搞成這個樣子,明明努力的寫app,使用者人數也蠻多的,每天全世界都有約5萬人在用我設計的app,但廣告收入還是那麼一丁點,無法維持生活,怨恨google抽那麼多抽成,怨恨使用者都不喜歡廣告,其實我也不喜歡廣告,我自己設計的app都會儘量不使用那種突然彈出的全螢幕廣告,會騷擾到使用者,但相比其他app都是全螢幕插頁廣告不斷跳出,自己這種善意做法卻讓自己沒收入,苦哈哈。

辛苦設計app,日以繼夜不斷努力,但是收入卻是如此低,仔細比較,去7-11當臨時工不用甚麼技術賺的時薪都比這高很多。 好難過,培養了幾年的Android ,ios app設計能力,卻是如此無用。有時感覺自己真的撐不下去,很想放棄,不禁落淚。 新朋友千萬不要以為獨立研發寫app是好工作,錯,大錯特錯。

美國郵政ZIP Postal Code app

昨天有一個app上架啦! 美國的郵遞區號查詢app. 目前先設計android版的,看受歡迎程度再開發ios版本.
https://play.google.com/store/apps/details?id=xyz.markapp.usa_postal_zip



設計了一週的時間,非常久. 為甚麼會設計這App,主因是上次設計了台灣的郵遞區號app,但沒幾個人下載. 於是何不如設計人口較多的國家呢? 美國當然是第一首選.
但是設計完美國Zip後,又發現其實世界上第一大國是中國. 為何不設計中國的postal code/zip code查詢app?
於是今天又要開始設計中國的郵遞區號查詢app. 中國那麼大,為甚麼不設計?

接下來,來談談我們設計app要首選幾個國家?
上圖是世界上人口密集的都市,紅點是密集處. 設計app往人多的地方就對了啦. 只設計台灣的app的話實在是眼界不夠大啊. 台灣人口2358萬人(2020.6.)只佔世界人口0.3%,排名第56名. 實在非常少.
看下表人口排名:

有幾個國家我們完全不熟:很少注意到. 例如: 巴基斯坦Pakistan(官方語言:烏爾都語,英語),奈及利亞Nigeria(官方語言:英語),孟加拉Bengal(官方語言:孟加拉語).但他們加起來人口也有5億人啊!!!!! 印度也是用英語的,也有13億人, 設計app要設計英語的就是這樣,會觸及到這些英語的人口.
我們不要只從台灣看自己這個小地方,太過關注自己週遭,反而應該要多看看世界其他地方.







好可怕,現在共產黨已經入侵台灣了

打開小米官網, 點了一個產品,出現下列畫面,一個頭上有共產黨黨徽的小米兔子, 但這是小米台灣站喔

所以別人說買小米的手機會很危險, 資料都會被傳到....某地 然後如果你是名人,你的隱私都會被掌控. 萬一你那天登大位為大官,這些都將會變成是你的把柄. 這些疑慮都是可能的.

Google也發消費券了,因為Covid-19, Google ads發送了安撫Coupon,不知你收到了嗎?

在這世上的人都很冷漠,世態炎涼. 美國,香港還發生抗議活動,世界疫情大流行時,大家生活都很難過. 全球app開發者都歷經ecpm大幅下滑的慘劇,都快活不下去時, 而google佛心的對大家發送ads消費券了. 真的很感動,

雖然只是一點小小的金額,但是不無小補. 可以用來發送廣告.app 開發者可以用來刊登app廣告.推廣app. 其他人可以發送關鍵字廣告,推廣其他業務. 很好用啦!!!


還沒收到的人趕快去檢查喔. 每個人額度不一樣喔. 換言之,最近大家的admob revenue 可能會慢慢增加囉,因為Google ads發送coupon, 最後這些錢會有大部分都流到各種app中, 所以大家的admob收益在這之後個月都會增加喔.

short-circuit at OR (java)

在設計台灣郵遞區號app時,遇到一個問題:
if( datasave_zip.arr_save != null || datasave_zip.arr_save.size() > 0 )
{ Log.e(TAG, "bypass! zip array save != null.");return;}上面這段code 有沒有錯呢? 大家猜猜看.... .. 沒錯,一執行就當機了.  java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
        at com.mark.taiwanpostmailbox.zip.datasave_zip.parpare_zip_data(datasave_zip.java:58)


我一開始寫的時候,考慮到OR short-circuit. 所以當
datasave_zip.arr_save = null 時, 理論上第一個條件成立, 就不會判斷到第二個條件才對??!! ???
所以問題到底在哪裡呢? 為甚麼會當機呢?
答案在這啦:
There is only one case of short-circuiting for each operator, and they are:false && ... - it is not necessary to know what the right-hand side is because the result can only be false regardless of the value theretrue || ... - it is not necessary to know what the right-hand side is because the result can only be true regardless of the value there
所以說: || OR 只在true時才會short-circuit, 而在false時,不會short-circuit. .... 故上面的例子會判斷第二個條件,但arr_save==…

談談我對郭董的了解

對,今天我又來聊聊郭董了, 接下來就發表一個獨家照片.這張照片只有我有(因為不就是....)
你問我為什麼要聊他? 這不是廢話嗎? 他是台灣首富阿~不聊他聊誰啊.等你變有錢再請我去你身邊當你專屬顧問. 我當然希望他本人能看到這篇文章,不過他是不會回應的啦. 如果他記憶力不錯的話,應還是記得我.
我覺得台灣一百年來能出個郭董,張忠謀,王永慶,張榮發這幾位企業家真的不容易. (政治上出了李登輝)
讓我們身為台灣人真是驕傲. 你看看中國大陸,除了鄧小平之外,有哪個總書記真正為民著想. 而中國企業家也出了馬雲!!!!小米雷軍(打趴HTC). 當然我說這幾位不是為了要拍馬屁,是要大家去看他們的自傳,看看他們怎麼經營企業的. 記住我這一句話: "別人怎麼有錢,都不甘你的事!!". 你又不是他兒子,遺產又不會給你. 我們要學的是他們的理念,思考方法. 成功是可以被複製的.
這個照片中的場景有個故事, 就是郭董座位在最前面,下面有800人(鴻海股東會都在這開),他都會在前面批公文,台上就是員工在演講. 希望演講後能被公司提拔. 有次有個人在台上演講了三個小時,郭董都在下面聽. 儘管很多後面的人在打pass要他結束演講,但台上的人為了陞官,不願停止. 讓全場800多人都在聽台上那員工唬爛!!! 我一直在想郭董應該會生氣吧. 結果他不但沒生氣,還全場聽完! 神奇吧!! 看到這事我就覺得,如果是我的話就會馬上要求員工講重點,15min結束,這員工連講了3小時,中間還不給休息. 最後郭董不僅沒發飆還聽完,還給他評語. 所以那天我才知道.為何大家都會叫郭董"鐵人".
我們要學習一下這精神,有時候做一件事,不管是工作上,讀書上我們撐不下去時,累的時候,要想一想這郭董這精神. 不要一下就喊累,這員工連三小時的演講,就好像一個百般刁難的客戶,當你面對這種客戶時,還能忍下去,以得到訂單為主. 其他人可能就馬上開罵或終止了,但你撐到最後,成功就屬於你,郭董可以,你也可以成功的.
ps:我寫這篇就是跟app開發者有什麼關係呢? 有的,當你寫app時,實在太累,遇到瓶頸,debug太久? 沒資金時,撐不下去時. 想想這篇文章,可以幫助到您.





admob真是最爛的服務

今天又收到了三個admob發給我的警告
Site Behavior: Navigation

重點是這三個違規有兩個不能歸咎於我,有一個根本就是不知道那裡有錯... admob真是一直找app開發者麻煩. 如果有機會呼籲大家換到別家用.
1.其中一個是使用台鐵的opendata app,來查詢火車時刻表,這個opendata最近台鐵改版了,就不能用了,所以我被判違規,這合情合理,我沒意見.
2.第二個中國地鐵這個app,admob根本就不告訴我那裡有錯,讓我自己猜,真是爛的admob.這樣整開發者. 這個app有三個功能,我怎知那一個有問題,我一個一個測試都沒發現有問題,寫信給admob也不回信,真的這樣亂搞app開發者.害大家焦慮做白工???!

3.第三個這個更是不滿意,這今天內政部整個opendata都當了.你下面看到的所有opendata都當機了,無法連上. 時好時壞.這admob也判我違規,問題是這個我只能寫信給內政部叫他們穩定一點,錯誤不在我這.我要修也沒辦法修.
過了幾天,內政部opendata比較穩定了,我又更新確認app ok.. 請求審查,但admob還是給我判違規,我就很疑惑...
試問到底是因為下圖app截圖中"紅框連到電話"是不允許的,還是因為在他測試時台灣內政部的opendata又短暫當機所造成的, 但是admob policy violation都不會告訴你, 他讓app開發者自己去猜違規判定者的心思? 我們不知道修改那裡才是對的. 現在google play app審核要花很久,且一直重新上架會讓app審核者很煩,等會他就找你的app開刀. 然後admob又如此不友善的對待app開發者. 真的是很生氣又無奈.



內政部opendata server經常不穩定,實在是造成大家困擾. 整個政府中,內政部是opendata做的最差的,看看別人交通部,都有PTX,中央氣象局,觀光局都做得很好. 內政部的整天三不五時斷線,害我每天都收到一堆人評一顆星.

種種事情一直來,讓我覺得admob是在找我麻煩,不應該讓app開發者瞎子摸象,像無頭蒼蠅一樣亂竄. admob並不是像他們廣告中所述服務好,當然,下次他們發問卷給我,我一定會給最爛的評分.
一個app從開發到測試到上架,要耗費多大的精神在這邊, 但admob對app開發者如此不尊重,實在是非常不好.

呼籲各位app開發者,生氣是沒…

Android Distribution dashboard

update date: 2020/05/21


關於APP使用者人數為0的問題.

今天來寫這篇,關於APP使用者人數為0的問題. 心情沉重,我有些APP使用者人數為0!!! (基本上, 少於500就近似於0了)
當初花了很多心血設計的APP,經過一段時間後,安裝人數不如預期.


這些app可能都要放棄了,不更新了. 即便有新想法,想更新或加新功能看看,但是一個一個app更新,時間可能也會花上3個多月. 在沒有收入的情況下,是很危險的一件事.
該麼辦呢?有沒有人可以給我建議?我困擾好久了,一直找不到辦法... APP不是設計出來就沒事了 當我們的APP從發想開始,到雛形出現,上架後, 除了研發經費,投入的心力人力物力,都是非常多的.
此外,還需要大筆的宣傳經費.每個月不停地投廣告. 如果沒有花錢去行銷,那可能都是這樣.....app安裝數非常少. 我們不可能像Google一樣,他有品牌優勢,消費者認Google,所以他的app至少都有幾千萬安裝數或上億安裝數. 也不可能像facebook一樣是殺手級應用,不用宣傳,就有使用者使用. 一開始誰會知道...這是沒人用的APP? 是的,這問題大家都說,誰知道阿.千金難買早知道...如果事先知道,就把時間放在其他事上面了. 幸運的是有些人花費的精力不多, 不幸運的是有些公司花了幾百萬卻做出一個不到500人使用的app,比比皆是. 所以,快速試錯是很重要的事. 這跟創業一樣,當你有一個事業想法,常常一股腦就投入幾百萬,但過沒多久才發現最後沒幾個人用. 你看Google+就是這樣,做不贏Twitter, Facebook...及時懸崖勒馬,及時停止,省下大筆開支.並專注在自己擅長領域. (下圖:殺手級應用已佔據大多數使用者時間,一般人想再開發相同應用已不可能成功)

90% app開發者命運都掌握在google,apple, Facebook 手上. 因為只要Google or apple app store的演算法變動,都會影響你的app排名,當app排名下降,app就慢慢變沒人用了
facebook更不用說了, 優先貼文,決定你的app曝光率. 所以我才說, 90%的開發者都是窮的,而且被人掐著脖子走. 各位新進有想要開發APP的人,要投入金錢前要先想好一件事? 是安安穩穩上班領年薪好? 還是要過這種膽顫心驚的日子?
如果只是寫寫APP過過癮,分享,不以營利為目的,是可以試試. 但如果要靠這過生活,真的不建議. 透過APP賺錢真的很難,比買賣商品實體或製造業都難. 真的…