一、安卓App開發(fā)常用框架
在安卓App開發(fā)中,有多種強(qiáng)大的框架被廣泛應(yīng)用,它們能夠幫助開發(fā)者提高開發(fā)效率,優(yōu)化應(yīng)用性能。以下是一些常用的安卓App開發(fā)框架:1. Android Jetpack
Android Jetpack是Google推出的一套全面的開發(fā)庫和工具集合,旨在簡化Android應(yīng)用開發(fā)。它包括LiveData、ViewModel、Room等組件,為開發(fā)者提供了強(qiáng)大的數(shù)據(jù)綁定、視圖管理和本地數(shù)據(jù)庫操作功能。2. RxJava

3. OkHttp與Retrofit
OkHttp和Retrofit是Android開發(fā)中常用的網(wǎng)絡(luò)請求庫。OkHttp是一個強(qiáng)大的HTTP客戶端,用于執(zhí)行網(wǎng)絡(luò)請求。而Retrofit則是一個基于OkHttp的RESTful網(wǎng)絡(luò)請求庫,它簡化了網(wǎng)絡(luò)請求和數(shù)據(jù)解析的過程,使得開發(fā)者能夠更方便地處理網(wǎng)絡(luò)請求。4. ButterKnife
ButterKnife是一個基于注解的View綁定庫,用于簡化Android中View的綁定操作。它減少了大量繁瑣的findViewById代碼,提高了開發(fā)效率和代碼的可讀性。5. Dagger
Dagger是一個依賴注入框架,它有助于提高Android應(yīng)用的可測試性和可維護(hù)性。通過依賴注入,開發(fā)者可以更容易地管理組件間的依賴關(guān)系,使得應(yīng)用的架構(gòu)更加清晰和可維護(hù)。6. Glide
Glide是一個高效的圖片加載和緩存庫,它能夠處理圖片的加載和顯示任務(wù)。它提供了豐富的配置選項(xiàng)和擴(kuò)展功能,使得開發(fā)者能夠輕松地集成圖片加載功能到應(yīng)用中。7. ARouter

8. GreenDAO
GreenDAO是一個輕量級的ORM(對象關(guān)系映射)庫,用于在Android應(yīng)用中操作數(shù)據(jù)庫。它提供了簡單的API和高效的數(shù)據(jù)庫操作功能,使得開發(fā)者能夠更方便地管理和操作數(shù)據(jù)庫。二、Frida框架在原生安卓開發(fā)中的應(yīng)用及Python初探
警告:本教程僅供學(xué)習(xí)探討之用,任何技術(shù)用途必須合法合規(guī),閱讀本教程即表示您同意不使用技術(shù)進(jìn)行任何違法操作。 值得注意的是,F(xiàn)rida主要針對的是原生開發(fā)的安卓應(yīng)用,也就是使用Java開發(fā)的app。對于其他類型的開發(fā)(如H5等),F(xiàn)rida可能無法直接hook。市面上至少有80%的應(yīng)用是原生開發(fā)的,因此Frida具有廣泛的應(yīng)用場景。 通過安裝Frida框架并使用Python腳本,我們可以實(shí)現(xiàn)對原生安卓應(yīng)用的動態(tài)hook。這意味著我們可以在運(yùn)行時攔截應(yīng)用的函數(shù)調(diào)用、修改其行為或獲取相關(guān)信息。這對于逆向工程、軟件分析和安全研究等領(lǐng)域具有廣泛的應(yīng)用價值。一、引言
在軟件開發(fā)過程中,我們經(jīng)常需要進(jìn)行代碼的修改和驗(yàn)證。今天,我要向大家介紹一種使用Python環(huán)境管理器快速創(chuàng)建虛擬環(huán)境的方法,以便進(jìn)行frida的安裝和配置。這種方法可視化操作,簡單易用,不再需要記憶復(fù)雜的命令。
二、創(chuàng)建虛擬環(huán)境

使用Python環(huán)境管理器,我們可以輕松地創(chuàng)建一個名為“frida_env”的虛擬環(huán)境。在虛擬環(huán)境中,我們可以方便地安裝和管理frida及其相關(guān)依賴包。這樣做的好處是可以避免系統(tǒng)環(huán)境的干擾,確保項(xiàng)目的穩(wěn)定性和安全性。
三、安裝frida
在安裝frida時,建議盡量使用科學(xué)上網(wǎng)。因?yàn)閒rida在下載過程中可能會遇到網(wǎng)絡(luò)問題,如果不使用科學(xué)上網(wǎng),下載速度可能會非常慢,甚至卡住很長時間。安裝完成后,我們可以通過執(zhí)行“frida--version”命令和導(dǎo)入frida來檢查是否安裝成功。
四、配置frida-server
frida-server是frida的重要組成部分,需要在手機(jī)端進(jìn)行配置。將frida-server拷貝到手機(jī)的/data/local/tmp目錄下,并進(jìn)行相應(yīng)的權(quán)限設(shè)置。然后,運(yùn)行frida-server命令。需要注意的是,運(yùn)行命令后,會有一個cmd窗口保持開啟狀態(tài),不能關(guān)閉。

五、使用WebStorm進(jìn)行frida開發(fā)
由于frida使用js語言,為了更好地進(jìn)行開發(fā),我們需要安裝一個代碼自動提示插件。WebStorm是一個不錯的選擇,它具有豐富的功能和良好的用戶體驗(yàn)。在官網(wǎng)上下載并按照提示進(jìn)行安裝即可。
iOS開發(fā)初探:環(huán)境搭建與代碼自動提示利器
章節(jié)一:開篇及Node.js的安裝
踏入iOS開發(fā)的世界前,我們需要做好基礎(chǔ)環(huán)境的搭建。安裝Node.js是每一位開發(fā)者必經(jīng)之路。打開您的終端,選擇適合您的目錄,開始創(chuàng)建一個全新的項(xiàng)目。當(dāng)一切準(zhǔn)備就緒后,我們需要在項(xiàng)目的終端中執(zhí)行命令安裝Frida代碼自動提示工具。這可以幫助我們更高效地進(jìn)行代碼編寫,提升開發(fā)效率。安裝成功后,你的Frida代碼將擁有智能提示功能。

章節(jié)二:抓包分析與接口探索
借助強(qiáng)大的抓包工具Charles和Postman,我們可以探索應(yīng)用的內(nèi)部接口。在抓包過程中,你可能會發(fā)現(xiàn)登錄用的接口帶有神秘的數(shù)據(jù)結(jié)構(gòu),如{"Encrypt":"x"}。面對這樣的數(shù)據(jù)格式,你是否感到困惑?這正是我們需要深入探索的起點(diǎn)。需要注意這個APK應(yīng)用并未進(jìn)行代碼加固處理,我們可以利用反編譯工具進(jìn)行搜索特定的關(guān)鍵詞如“user/login”,進(jìn)一步定位關(guān)鍵函數(shù)。
章節(jié)三:驗(yàn)證與Hook技術(shù)引入
在找到可能的登錄函數(shù)后,如何驗(yàn)證我們的猜想是否正確呢?我們可以模擬手機(jī)端的登錄操作,同時觀察電腦端控制臺的輸出。通過輸出日志的驗(yàn)證,確認(rèn)是否執(zhí)行了預(yù)期的login函數(shù)。一旦驗(yàn)證無誤,我們就可以進(jìn)一步使用Hook技術(shù)進(jìn)行分析。Hook技術(shù)將在我們的分析中起到關(guān)鍵作用。下一課我們將深入探討如何自動登錄這個應(yīng)用。
章節(jié)四:
iOS App開發(fā)的框架建設(shè)

一個合適的框架對于iOS App開發(fā)至關(guān)重要。它能幫助我們降低問題的復(fù)雜度并減少錯誤發(fā)生的可能性。一個好的框架應(yīng)具備清晰的層次結(jié)構(gòu),各模塊間既獨(dú)立又相互協(xié)作,通過有限的接口進(jìn)行通信。理想狀態(tài)下,除了核心模塊外,其他模塊都應(yīng)該是可插拔的。各層次間的依賴關(guān)系清晰,幾乎不會出現(xiàn)逆向依賴的情況。微信在這方面做得非常出色,許多模塊都是從MMService繼承而來并由MMServiceCenter進(jìn)行管理。在實(shí)際開發(fā)中我們也可能會遇到一些管理上的混亂情況,這就需要我們根據(jù)實(shí)際情況進(jìn)行調(diào)整和優(yōu)化。
章節(jié)五:總結(jié)與展望
一、App的層次結(jié)構(gòu)解析
大部分App的架構(gòu)縱向劃分,不外乎有三個主要層次:展現(xiàn)層、邏輯層和數(shù)據(jù)訪問層。
1. 展現(xiàn)層(Presentation layer)

這一層負(fù)責(zé)管理UI和UIViewController,是用戶與App之間的直接交互界面。
2. 邏輯層(Business/Service Layer)
邏輯層負(fù)責(zé)定義和轉(zhuǎn)發(fā)邏輯數(shù)據(jù),起到連接展現(xiàn)層和數(shù)據(jù)訪問層的橋梁作用。
3. 數(shù)據(jù)訪問層(Data Access Layer)
此層專注于API構(gòu)造、網(wǎng)絡(luò)請求和數(shù)據(jù)持久化等工作,是App與后端交互的核心。

而在實(shí)際開發(fā)中,各層根據(jù)業(yè)務(wù)邏輯的復(fù)雜性可能會采用單層或多層結(jié)構(gòu)。以數(shù)據(jù)訪問層為例,它又可以細(xì)分為網(wǎng)絡(luò)層和持久化層。
二、展現(xiàn)層的特殊需求:ViewModel的重要性
在實(shí)際開發(fā)中,展現(xiàn)層經(jīng)常需要展示不同的界面但使用相同的Model。比如,會話界面、收藏界面和“問一問”功能都需要圖片展現(xiàn),但背后的Model可能各不相同。這時,就需要額外的ViewModel層來粘合展現(xiàn)層和邏輯Model,確保界面展示的準(zhǔn)確性和高效性。
三、遵循SOLID原則與設(shè)計(jì)模式的使用
這是一個經(jīng)久不衰的話題。在iOS開發(fā)中,遵循SOLID原則至關(guān)重要。要慎用各種設(shè)計(jì)模式,確保代碼的清晰、可維護(hù)和可擴(kuò)展。雖然這個話題可以深入討論幾天幾夜,但核心原則不容忽視。

四、定義自己的UI基類:利弊分析
定義自己的UI基類(如UIView、UIViewController、UITableViewCell)能帶來便利,讓子View、Controller、Cell輕松繼承基類的共有行為和樣式。這也可能引入管理風(fēng)險。團(tuán)隊(duì)成員可能會向基類添加不普遍適用的特性,導(dǎo)致基類權(quán)責(zé)過重。像微信的UIViewController基類設(shè)計(jì)就是一個反面例子,類文件過于臃腫,增加了理解和排查問題的難度。
五、工具類的重要性及范例
好用的工具類能成框架的重要組成部分,便捷解決局部問題且不引入過多復(fù)雜度。例如,針對NSTimer的retain cycle問題,可以封裝基于Block或weak delegate的NSTimer;對于KVO的add和remove不匹配問題,可以使用THObserversAndBinders或FB的KVOController;當(dāng)核心模塊被多個模塊依賴時,GCDMulticastDelegate能助力解耦。做好示范,遵循破窗理論,后續(xù)開發(fā)將更為順暢。
通過以上五個章節(jié)的闡述,希望能讓讀者對App的層次結(jié)構(gòu)、展現(xiàn)層的特殊需求、SOLID原則與設(shè)計(jì)模式的使用、自定義UI基類的利弊以及工具類的重要性有更深入的理解。
