Tagged

Android

A collection of 5 posts

【Android】對Resources資源加密
Android

【Android】對Resources資源加密

有一個很神秘的需求,需要對專案內的圖檔進行加密,但又不能影響到專案的開發。於是在 Github 上發現了一個看似可用的解決方案,下面就來說說這是怎麼做到的。 原理在 Android Studio 當中,要透過 gradle 打包 apk 的時候,我們可以透過 addBuildListener 來監聽整個打包的過程。在 addBuildListener 這個 Listener 裡面,有幾個方法: settingsEvaluated()、 projectsLoaded()、projectsEvaluated()、 buildFinished() 。這邊我們專注在projectsEvaluated()、 buildFinished() 這兩個方法,其中projectsEvaluated() 會是在打包 apk 前執行的,而buildFinished() 則是會在打包完成後執行。因此我們可以利用這兩個方法,來對圖檔進行加密,在要打包成 apk 時,我們將圖檔們加密並放入 apk 中,等打包結束後,我們在把原檔還原回來。 至於 apk

【Android 】利用Ktor建立FileServer
Android

【Android 】利用Ktor建立FileServer

最近有個需求,需要利用WebView來播放本地端的檔案,看似簡單的需求,但卻會被Chromium給擋掉,原因是因為Chromium不允許直接讀取本地檔案。為了解決這件事情,讓WebView可以順利讀取到本地檔案,那就直接在App裏開啟一個HttpServer讓WebView透過HttpServer來讀取檔案。 找了很多套件,試了很多方式,最後才跟Ktor相見恨晚啊!Ktor是什麼呢?這是一個專門為Kotlin打造的網路相關套件,你可以透過Ktor來建立Server端或是Client端的程式。而且真的算是蠻簡單的,官方也提供了範例程式,基本上只需要小改一下就可以直些使用了。 引入套件// Ktor的核心包 implementation "io.ktor:ktor-server-core:2.0.1" // 供Ktor使用的引擎包,另外有Jetty, Tomcat, CIO可用 implementation "io.ktor:ktor-server-netty:2.0.1" // 用於印出Request及Response的log用 implementation "io.ktor:ktor-server-call-logging:2.0.1" // 用於支援PartialContent用 implementation "io.ktor:ktor-server-partial-content:

【Android】各版本改動一覽
Android

【Android】各版本改動一覽

Google大哥每年都會對Android推出新的版本,一來感到興奮,不知道大哥又要端出什麼新玩意,但另一方面卻也感到害怕,不知道這次大哥又改動了什麼部分,要讓開發變得寸步難行(誤)。截至今日Android已經推進到第13個版本了,然版本破碎化的問題依舊存在,每開發一個新的App就要先問,需要支援的版本幅度,然後再看各個功能有沒有被拿掉,各種煩悶,所以這邊就來簡單整理一下各個版本間的變動及對開發者的影響。 Adnroid 12android:exported 它主要是設置Activity 是否可由其他應用的組件啟動, “true” 則表示可以,而“false”表示不可以。若為“false”,則Activity 只能由同一應用的組件或使用同一用戶ID 的不同應用啟動。當然不止是Activity, Service 和Receiver 也會有exported 的場景。一般情況下如果使用了intent-filter,則不能將exported 設置為“false”,不然在Activity 被調用時系統會拋出ActivityNotFoundException 異常。相反如果沒有intent-filter,那就不應該把Activity 的exported 設置為true ,這可能會在安全掃描時被定義為安全漏洞。而在Android 12 的平台上,也就是使用targetSdkVersion

【Android】 MVVM實作 - 使用ViewModel, LiveData, DataBinding
Android

【Android】 MVVM實作 - 使用ViewModel, LiveData, DataBinding

今天要利用Youbike場站資訊的OpenData來練習MVVM的架構,主要功能就是每30秒去抓一次資料然後顯示出來。這邊會拆分成幾個步驟來做,首先會先把資料的部分處理好,也就是Call API的部分;再來會實作LiveData及DataBinding的功能,那就來看看該怎麼做吧! 資料來源這次使用的是由台北市政府提供的「YouBike臺北市公共自行車即時資訊」 API名稱:YouBike臺北市公共自行車即時資訊 API網址:https://tcgbusfs.blob.core.windows.net/blobyoubike/YouBikeTP.json 引入套件由於會使用到KAPT(Kotlin的Annotation Processing),DataBinding,anko,recyclerView及lambda的寫法,所以需要對Gradle檔案做些修改。 KAPTapply plugin: 'kotlin-kapt' android { kapt { generateStubs = true } } dependencies { implementation 'androidx.activity:activity-ktx:1.1.0' }build.gradleDataBindingandroid { dataBinding { enabled true } } dependencies

【Android】 MVC, MVP, MVVM 到底是什麼 -  Android開發為例 ?
Android

【Android】 MVC, MVP, MVVM 到底是什麼 - Android開發為例 ?

從開始寫程式以來,雖然會自己把 Activity, Database 之類的用不同的資料夾來區分,也沒在管什麼MVC, MVP更不用講今天要提到的MVVM。但隨著Android Jetpack的推出,提供一些好用的方法來實現MVVM架構,這邊就來釐清一下到底什麼是MVC, MVP, MVVM。 設計架構MVC (Model / View / Controller)MVC架構中,把程式分成了三個層級: M:Model - 負責處理與資料相關的事情,包括取得資料、儲存資料等等。V:View - 如字面上所示,就是與介面相關的東西。C:Controller - 介於View及Model之間的橋樑,接收來自View的事件,去操控Model的資料。Android 中的 MVC在Android的世界中可以將Layout的XML視為View,data class視為Model,而Activity或Fragment則是Controller。 這樣的架構看似很完美,但其實執行起來有他的困難點,首先View上元件的操控通常會寫在Activity或Fragment當中,導致Activity或Fragment需同時負責View及Controller的事情,當介面越複雜、要處理的邏輯越多時,Activity或Fragment的程式碼就會變得又臭又長。 MVP (Model / View / Presenter)