1. ActivityManager是什麼如何高效使用
ActivityManager是android系統中的一個核心服務,負責管理應用程序的生命周期和任務堆棧,確保應用程序在後台運行時不會佔用過多資源,同時為用戶提供流暢的操作體驗。以下是關於ActivityManager的詳細介紹以及如何高效使用它的方法:
一、ActivityManager的主要功能
二、如何高效使用ActivityManager
合理使用Activity生命周期方法
優化任務堆棧
管理內存
利用ActivityManager提供的API
綜上所述,高效使用ActivityManager需要開發者深入理解其功能和API,並結合實際應用場景進行合理的優化和管理。
2. 安卓文件可以刪除嗎
可以刪除,但是會重新生成的。
這個是系統的緩存文件,刪了之後可能你存在手機上 的一些東西就不見了,裡面一個是data文件及是存放數據的一個obb文件夾。
Android是一種基於Linux的自由及開放源代碼的操作系統。
主要使用於移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用「安卓」。
Android操作系統最初由Andy Rubin開發,主要支持手機。
(2)android清除棧擴展閱讀:
系統結構:
Android 是運行於Linux kernel之上,但並不是GNU/Linux。因為在一般GNU/Linux 里支持的功能,Android 大都沒有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。
Android又以Bionic 取代Glibc、以Skia 取代Cairo、再以opencore取代FFmpeg等等。
Android 為了達到商業應用,必須移除被GNU GPL授權證所約束的部份,例如Android將驅動程序移到 Userspace,使得Linux driver 與 Linux kernel徹底分開。
Bionic/Libc/Kernel/ 並非標準的Kernel header files。Android 的 Kernel header 是利用工具由 Linux Kernel header 所產生的,這樣做是為了保留常數、數據結構與宏。
Android 的 Linux kernel控制包括安全(Security),存儲器管理(Memory Management),程序管理(Process Management),網路堆棧(Network Stack),驅動程序模型(Driver Model)等。
下載Android源碼之前,先要安裝其構建工具 Repo來初始化源碼。Repo 是 Android 用來輔助Git工作的一個工具。
應用組件:
1、活動
Android 中,Activity是所有程序的根本,所有程序的流程都運行在Activity 之中,Activity可以算是開發者遇到的最頻繁,也是Android 當中最基本的模塊之一。
在Android的程序當中,Activity 一般代表手機屏幕的一屏。如果把手機比作一個瀏覽器,那麼Activity就相當於一個網頁。
在Activity 當中可以添加一些Button、Check box 等控制項。可以看到Activity 概念和網頁的概念相當類似。
一般一個Android 應用是由多個Activity 組成的。這多個Activity 之間可以進行相互跳轉,例如,按下一個Button按鈕後,可能會跳轉到其他的Activity。
和網頁跳轉稍微有些不一樣的是,Activity 之間的跳轉有可能返回值,例如,從Activity A 跳轉到Activity B,那麼當Activity B 運行結束的時候,有可能會給Activity A 一個返回值。這樣做在很多時候是相當方便的。
當打開一個新的屏幕時,之前一個屏幕會被置為暫停狀態,並且壓入歷史堆棧中。用戶可以通過回退操作返回到以前打開過的屏幕。
可以選擇性的移除一些沒有必要保留的屏幕,因為Android會把每個應用的開始到當前的每個屏幕保存在堆棧中。
2、服務
Service 是android 系統中的一種組件,它跟Activity 的級別差不多,但是他不能自己運行,只能後台運行,並且可以和其他組件進行交互。
Service 是沒有界面的長生命周期的代碼。Service是一種程序,它可以運行很長時間,但是它卻沒有用戶界面。這么說有點枯燥,來看個例子。
打開一個音樂播放器的程序,這個時候若想上網了,那麼,打開Android瀏覽器,這個時候雖然已經進入了瀏覽器這個程序。
但是,歌曲播放並沒有停止,而是在後台繼續一首接著一首的播放。其實這個播放就是由播放音樂的Service進行控制。
當然這個播放音樂的Service也可以停止,例如,當播放列表裡邊的歌曲都結束,或者用戶按下了停止音樂播放的快捷鍵等。
Service 可以在和多場合的應用中使用,比如播放多媒體的時候用戶啟動了其他Activity這個時候程序要在後台繼續播放,比如檢測SD 卡上文件的變化,再或者在後台記錄地理信息位置的改變等等,總之服務嘛,總是藏在後頭的。
3、廣播接收器
在Android 中,Broadcast是一種廣泛運用的在應用程序之間傳輸信息的機制。
而BroadcastReceiver 是對發送出來的Broadcast進行過濾接受並響應的一類組件。
可以使用BroadcastReceiver 來讓應用對一個外部的事件做出響應。這是非常有意思的,例如,當電話呼入這個外部事件到來的時候,可以利用BroadcastReceiver 進行處理。
例如,當下載一個程序成功完成的時候,仍然可以利用BroadcastReceiver 進行處理。
BroadcastReceiver不能生成UI,也就是說對於用戶來說不是透明的,用戶是看不到的。
BroadcastReceiver通過NotificationManager 來通知用戶這些事情發生了。
BroadcastReceiver 既可以在AndroidManifest.xml 中注冊,也可以在運行時的代碼中使用Context.registerReceiver()進行注冊。
只要是注冊了,當事件來臨的時候,即使程序沒有啟動,系統也在需要的時候啟動程序。
各種應用還可以通過使用Context.sendBroadcast () 將它們自己的Intent Broadcasts廣播給其他應用程序。
4、內容提供
Content Provider 是Android提供的第三方應用數據的訪問方案。
在Android[16]中,對數據的保護是很嚴密的,除了放在SD卡中的數據,一個應用所持有的資料庫、文件等內容,都是不允許其他直接訪問的。
Android當然不會真的把每個應用都做成一座孤島,它為所有應用都准備了一扇窗,這就是Content Provider。
應用想對外提供的數據,可以通過派生Content Provider類, 封裝成一枚Content Provider,每個Content Provider都用一個uri作為獨立的標識。
形如:content://com.xxxxx。所有東西看著像REST的樣子,但實際上,它比REST 更為靈活。
和REST類似,uri也可以有兩種類型,一種是帶id的,另一種是列表的,但實現者不需要按照這個模式來做,給id的uri也可以返回列表類型的數據,只要調用者明白,就無妨,不用苛求所謂的REST。
3. Android中的返回鍵和代碼中的finish()之間的區別
首先:兩者都能結束Activity,區別如下:
返回鍵:默認為結束當前顯示的Activity,到Activity的生命周期onDestroy()為止,當再次啟動Activity時則從onCreate()開始且不會調用onSavedInstanceState()。
finish():告訴系統將棧頂的Activity移出棧,同時也不會及時的調用生命周期方法onDestroy(),從而導致資源
不能及時釋放
4. android activity 按back鍵 執行什麼過程
進程只是一個APP的容器,容器內的內容不會因為容器的空置而消失。但一旦容器被銷毀,容器中的內容也會隨之銷毀。當用戶按下back鍵時,實際上是執行了一個棧操作,具體來說就是棧頂元素被移除(即彈出,英文稱為pop操作)。這一過程會觸發棧頂Activity的onBackPressed()方法,默認情況下,這個方法會調用finish(),finish()方法則會進一步調用Activity的onDestroy()方法,從而銷毀當前Activity。
而當用戶按下home鍵時,系統的處理方式則是將整個任務棧掛起並放到後台,使用戶回到啟動器首頁。此時,Activity並未被銷毀,因此不會觸發Activity的onDestroy()方法。至於長按home鍵啟動任務管理器來結束應用,這種情況下,進程的存在與否則取決於具體的手機型號。一些手機可能會銷毀應用(即銷毀Application類的實例),但進程作為容器仍然存在,只是其中的內容為空。如果發現進程消失,通常是因為系統回收了空進程。而在另一些手機上,直接結束進程的操作可能會導致整個進程被徹底銷毀。
綜上所述,按下back鍵和home鍵的不同處理方式,導致了兩種不同的結果:一種是銷毀當前Activity並調用其生命周期方法;另一種則是簡單地掛起任務棧並將其移至後台,僅在用戶再次啟動應用時才會重新載入。
需要注意的是,進程的空置並不意味著其完全消失,這與進程的生命周期管理緊密相關。在某些情況下,即使應用未運行,其對應的進程也可能仍然存在於後台,等待下次需要時被重新激活。
5. Android逆向開發技術棧
Android逆向開發技術棧
一、基礎知識點
操作系統
內存管理:理解內存地址空間、虛擬內存與物理內存的映射關系;掌握堆和棧的使用。
進程管理:熟悉進程管理、進程優先順序、進程通信、進程地址空間、進程許可權;了解fork、exec、clone等系統調用;掌握/proc/pid/map等文件的使用。
設備驅動:了解設備驅動文件,特別是binder驅動。
文件系統:掌握文件系統的基本結構、文件管理、訪問許可權以及用戶和用戶組的概念。
網路:理解網路協議棧的基本工作原理。
系統調用:掌握關鍵系統調用如ptrace、fork、exec、clone、ioctl、mmap等。
Linux操作系統:深入理解Linux操作系統的內核機制。
Android Framework:熟悉Android框架層的源碼和架構。
開發語言
匯編ASM:了解ARM32/64架構下的過程調用規范(APCS),掌握寄存器使用限制、棧使用慣例等。
C/C++:熟悉C/C++語法、優化寫法、編譯原理;理解基本數據類型、結構體、類、對象等復雜數據結構體在內存中的存儲。
Java/Smali/JNI/NDK:掌握Java、Smali語法,了解JNI和NDK的使用。
跨平台語言:熟悉Flutter、WebView/JS、H5、ReactNative等跨平台開發技術。
編譯原理
理解編譯過程、編譯優化;掌握代碼混淆和保護技術,如Java2C、OLLVM等。
了解解釋執行和編譯執行的區別;熟悉腳本語言和解釋型語言的特點。
靜態分析
掌握DEX、ELF等文件結構,了解資源文件結構和資源載入過程。
動態分析
理解程序載入和執行原理,掌握Linker機制、ART機制等。
網路協議、抓包分析
熟悉Http/Https、Websocket、TCP/IP等網路協議;掌握抓包分析工具的使用。
了解AES、DES、RSA、MD5、SHA-1、Base64等加密演算法的基本原理和應用。
二、實戰技術點
反調試、反ROOT、反HOOK等
掌握反調試、反ROOT、反HOOK、反代理、反抓包、防Dump等技術。
脫殼加殼、修復、代碼還原
熟悉Java2C、VMP、OLLVM等技術;掌握內存掃描分析、內存Dump等方法。
協議分析、游戲數據包還原和封裝
能夠進行協議分析,還原和封裝游戲數據包;實現APP離線運行。
虛擬機運行、多開/應用分身
掌握ART、Flutter、WebView、H5、ReactNative等虛擬機技術;實現多開/應用分身功能。
爬蟲、自動化
掌握爬蟲技術,能夠獲取和處理數據;實現自動化和批量執行功能。
馬甲包、二次打包
熟悉馬甲包、二次打包技術;能夠過簽名/包名/代碼完整型驗證。
運行環境監測
掌握虛擬機監測、HOOK檢測、ROOT檢測、無障礙檢測、VPN代理監測等技術。
設備指紋、設備ID
了解設備指紋、設備ID的生成和應用;掌握軟改硬改、改機抹機等技術。
自動化、模擬執行
掌握無障礙服務、自動化框架、模擬點擊等技術;實現群控功能。
漏洞利用
掌握保活、彈窗、webView漏洞等漏洞利用技術。
三、工具集合
逆向分析工具
IDA、Jadx-gui、charles、Httpcannary、fiddle、binary Ninja等。
模擬器、Hook框架
模擬器、zymagisk面具、Frida、xposed等Hook框架資源。
其他工具
MT管理器、dex2jar、dex2oat、readelf、ar、as、objmp等。
四、業務需求
代碼、數據、演算法還原
能夠進行代碼、數據、演算法的還原;進行競品分析。
插件開發
掌握插件開發技術,實現增刪改相關功能。
APP協議模擬
能夠模擬用戶操作,實現批量操作、自動化、群控等功能;突破使用限制。
游戲協議分析
掌握游戲協議分析技術,進行封包、解包操作。
虛擬機開發
用於模擬執行、多開、游戲腳本運行等;提供虛擬系統API介面訪問。
爬蟲系列
掌握各種爬取數據、存儲分析數據、呈現數據的技術。
五、Android系統相關知識
init進程啟動過程
了解init進程啟動過程,包括系統Native服務(如mediaserver、surfaceflinger、audioflinger等)的啟動,以及zygote進程和SystemServer的啟動。
Android進程通訊
掌握Binder、socket、匿名共享內存等Android進程通訊機制。
Android Runtime
了解Art/Dalvik運行時環境;掌握App啟動過程。
Apk安裝過程
熟悉Apk安裝過程中的組件注冊、許可權控制等步驟。
六、伺服器端逆向
七、開發工具集