1. android App安裝以及啟動流程
Android App的安裝可以分為有界面的安裝和無界面的安裝。
有界面的安裝其實就是調用系統App(PackageInstaller)咐碼去安裝apk,打開安裝apk應用之後,點擊安裝按鈕執行startInstall方法,然後就進入安裝中界面開始安裝,安裝成功或者衡族哪失敗都會有對應的回調。內部其實也是使用PackageManager的installExistingPackage方法,通過binder機制,調用到PackageManagerService的installExistingPackage方法,最終調用到installExistingPackageAsUser方法安裝,而 安裝的核心原理其實就是將apk文件拷貝到系統可識別的重要的文件目錄 :
無界面安裝是調用adb命令,執行到一個c寫的commandline腳本,調用 install_app 方法,然後再調用 pm_command ,然後執行到pm腳本,執行 run 方法,調用 runinstall ,然後調用 installPackageAsUser 通過AMS執行安裝。
說到App的啟動,就需要從穗則開機開始說起,Android開機會先把所有應用安裝一遍就是把apk拷貝到對應的目錄(這也是Android開機慢的原因)。
整個流程如下:
其實App的啟動,除了剛開機是不一樣之外,正常時候基本與Activity的啟動非常接近。
2. android怎麼設置開機啟動軟體
Android系統通過應用程序自行在系統中登記注冊事件(即Intent)來響應系統產生的各類消息。
例如Android實現系統開機自啟動程需要在Manifest中加入如下Intent-filter及許可權Uses-permission即可。
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
(修改時候主要是去掉上面該行即可)
<category android:name="android.intent.category.HOME" />
</intent-filter>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
(修改時候主要是去掉上面該行即可) Android系統為應用程序管理功能提供了大量的API,可以通過API控制Intent和permission,其中
上述配置表示應用程序會響應系統產生的android.intent.action.BOOT_COMPLETED(系統啟動完成)信號,以此來實現應用程序自啟動。當然知道上述原理後,我們就可以隨心所欲的控製程序開機自啟動了。具體思路如下:
一、手工方法
基於上述原理,我們可以通過對系統中已安裝的程序去除其Manifest的上述配置片段來控制應用程序的對系統的響應,當然沒源碼可修改編譯的情況下只能實現屏蔽其對有些信號的響應,例如屏蔽該程序不再開機自啟動。手工方法就是利用有關工具直接在解壓其APK包後,修改其Manifest的上述配置行後再打包成APK,最後安裝到系統中就實現了屏蔽其自啟動功能。具體相關的工具軟體主要有APKTOOL。(請自己放狗去搜索下載)
二、編程實現
當然手工方法需要藉助APKTOOL等工具,步驟比較法繁瑣,我們可以通過自己開發來實現該功能。幸好
1、PackageManager
本類API是對所有基於載入信息的數據結構的封裝,包括以下功能:
·安裝,卸載應用
·查詢permission相關信息
·查詢Application相關信息(application,activity,receiver,service,provider及相應屬性等)
·查詢已安裝應用
·增加,刪除permission
·清除用戶數據、緩存,代碼段等
非查詢相關的API需要特定的許可權,具體的API請參考SDK文檔。
2、ActivityManager相關
本類API是對運行時管理功能和運行時數據結構的封裝,包括以下功能
·激活/去激活activity
·注冊/取消注冊動態接受intent
·發送/取消發送intent
·activity生命周期管理(暫停,恢復,停止,銷毀等)
·activity task管理(前台->後台,後台->前台,最近task查詢,運行時task查詢)
·激活/去激活service
·激活/去激活provider等
task管理相關API需要特定的許可權,具體API可參考SDK文檔。
3. android 啟動apk源碼在哪個目錄下
首先打開Android Studio安卓Apps開發工具。
選擇單擊工具欄Android SDK Manager圖標
彈出settings對話框,單擊launch Standalone SDK Manager 即啟動獨立的SDK Manager 程序。
彈出Android SDK Manager程序主界面。
選擇下載安裝Sources for Android SDK;
使用Android Studio就可以查看Android源碼文件了。
4. Android App 開機自啟動
<article class="_2rhmJa">
Android 設備開機自啟動的可以用廣播實現,因為 Android 設備開機時會發送一條開機廣播 "android.intent.action.BOOT_COMPLETED"。接收後實現啟動就完成了。
接下來是准備工作
如果按照上面的全部步驟後操作後,重啟沒有自動啟動程序,怎麼辦呢?是怎麼回事呢?
*那麼首先請檢查一下你的手機是不是安裝了360等安全助手之類的軟體,如果有,請在軟體的自啟動軟體管理中將app設置為允許
*我的手機沒有安裝這些軟體,但是手機中自帶了安全助手,有的手機系統設置裡面自帶了自啟動軟體管理的功能 ,所以在這里將我們的app設置為允許開機啟動),重啟手機,測試是否成功。
然而並沒有成功
接收不到BOOT_COMPLETED廣播可能的原因
(1)、BOOT_COMPLETED對應的action和uses-permission沒有一起添加
(2)、應用安裝到了sd卡內,安裝在sd卡內的應用是收不到BOOT_COMPLETED廣播的
(3)、系統開啟了Fast Boot模式,這種模式下系統啟動並不會發送BOOT_COMPLETED廣播
(4)、應用程序安裝後重來沒有啟動過,這種情況下應用程序接收不到任何廣播,包括BOOT_COMPLETED、ACTION_PACKAGE_ADDED、CONNECTIVITY_ACTION等等。
Android3.1之後,系統為了加強了安全性控制,應用程序安裝後或是(設置)應用管理中被強制關閉後處於stopped狀態,在這種狀態下接收不到任何廣播,除非廣播帶有FLAG_INCLUDE_STOPPED_PACKAGES標志,而默認所有系統廣播都是FLAG_EXCLUDE_STOPPED_PACKAGES的,所以就沒法通過系統廣播自啟動了。所以Android3.1之後
(1)、應用程序無法在安裝後自己啟動
(2)、沒有ui的程序必須通過其他應用激活才能啟動,如它的Activity、Service、Content Provider被其他應用調用。
存在一種例外,就是應用程序被adb push you.apk /system/app/下是會自動啟動的,不處於stopped狀態。
並不太懂 我的APP啟動後 已經收到廣播
第一種方式 我再模擬器上 測試 可以 android 9.0版本
桌面設置也會把你的app當成一個桌面主題,還有一個選項是系統桌面,你需要設置成自己的app
如果找不到桌面設置選項,可以從手機設置–應用程序-查看所有應用程序(包括系統的應用程序),找到桌面程序之類的字眼的應用,清楚其默認設置。