當前位置:首頁 » 操作系統 » 安卓防殺源碼

安卓防殺源碼

發布時間: 2022-12-26 02:11:19

安卓手機為什麼可以不用公開源碼

Android——基於Linux平台的開源手機操作系統,而不是開發系統。開源系統的重點應該是在「開放」,是接納、包容和發展,求同存異,互利共贏,才是開源的本質。
開源,全稱為開放源代碼。市場上開源軟體層出不窮,很多人可能認為開源軟體最明顯的特點是免費,但實際上並不是這樣的,開源軟體最大的特點應該是開放,也就是任何人都可以得到軟體的源代碼,加以修改學習,甚至重新發放,當然是在版許可權制范圍之內。

對象。開源系統其實面向的用戶有兩個群體,一是程序員,他們最關心源代碼,能不能進行二次開發利用;二是普通終端用戶,他們只關心軟體功能夠不夠強。開源系統的重點應該是在「開放」,是接納、包容和發展,求同存異,互利共贏,才是開源的本質。
用戶在使用開源產品時,不但需表明產品來自開源軟體和註明源代碼編寫者姓名,而且還應把所修改產品返回給開源軟體,否則所修改產品就可視為侵權。

❷ 安卓中怎樣防止用戶卸載應用程序

打開安裝源碼目錄,找到packages/apps/PackageInstaller/src/com/android/packageinstaller/下的兩個文件:
1、UninstallAppProgress.java //程序卸載過程
2、UninstallerActivity.java //程序卸載界面
方法是在UninstallerActivity.java對應位置加上一段代碼即可:
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// Get intent information.
// We expect an intent with URI of the formpackage://<packageName>#<className>
// className is optional; if specified, it is the activity the userchose to uninstall
final Intent intent = getIntent();
Uri packageURI = intent.getData();
String packageName = packageURI.getEncodedSchemeSpecificPart();
if(packageName == null) {
Log.e(TAG, "Invalid package name:" + packageName);
showDialog(DLG_APP_NOT_FOUND);
return;
}
if(packageName.equals("cn.android.managerapp")){
/*AlertDialog.Builder builder= new AlertDialog.Builder(this);
//builder.setIcon(android.R.drawable.ic_dialog_info);
builder.setTitle("Message");
builder.setMessage("Cannot be uninstall!");
builder.setPositiveButton("確認", null);
//builder.create().show();
builder.show();
//showDialog(DLG_APP_NOT_FOUND);
//return;
finish();*/
newAlertDialog.Builder(this)
.setTitle("游戲控制")
.setMessage("對不起,此程序不允許卸載!")
.setPositiveButton("確定",
newDialogInterface.OnClickListener(){
public voidonClick(DialogInterface dialoginterface, int i){
//這里設置點擊後執行
finish();
}
}
)
.show();
}
mPm = getPackageManager();
boolean errFlag = false;

❸ 為什麼開啟防抓包會泄露源碼

源代碼防泄密

源代碼防泄密需求可以分為兩小類:純軟體研發防泄密需求和移動、移動游戲終端、嵌入式開發類防泄密需求。

1、 純軟體研發防泄密需求一般都是面向ERP、PDM、專業業務系統等開發,所試用的版本管理工具大致有CVS(早期版本的SVN),SVN,VSS,GIT。SVN適用於各種語言管理,但用對較多的開發語言是C,C++,JAVA,而VSS用的較多的開發語言是C#.net。

2、 移動、移動游戲終端、嵌入式開發,一般基於安卓、Linux、mac研發平台。我們支持最多的則是安卓,Linux只有少量版本,mac的暫時沒有。

安卓類的開發環境一般都是使用JAVA語言在Eclipse平台做開發,它們也都有自己的資料庫,比如SQL Sever,My SQL,和Oracle。

❹ 請問安卓系統是開源的,那麼源代碼在哪找,我想自己改一改安卓解鎖界面。教程裡面是修改代碼,這是哪裡的

安卓自帶解鎖界面被修改是很容易導致系統崩潰的,因為他和手機其他部分連接,而且現在大部分安卓都被深度定製,源代碼都改的面目全非了,你找的一個教程可能不適合另外一個ui

❺ 求助安卓源碼

路過,給你個思路,你可以用recyclerview, viewpager 和 fragment來做,你去了解一下recyclerview和viewpager的用法就知道個大概了

❻ 如何查看安卓apk程序的源代碼

將apk文件拷貝至sdcard上。
命令順序如下:

進入Android sdk文件夾/tools目錄下
輸入adb shell
輸入su
輸入cd data
輸入cd app
這時就可以看到你安裝的所有的apk文件。輸入cp 空格 對應的apk 空格 /sdcard/
這樣就將apk文件拷貝出來了。
將apk文件後綴直接變成rar格式,可以看到熟悉的目錄結構了,

其中xml文件打開後都是二進制的,無法查看。
這時就用到了一個android4me的AXMLPrinter2工具。(請自行網路搜索)
輸入以下命令,將xml文件解析出來
java -jar AXMLPrinter2.jar showtimes_list.xml
此命令是在命令行中查看此showtimes_list.xml
將showtimes_list.xml生成xml文件,則輸入以下命令:
java -jar AXMLPrinter2.jar showtimes_list.xml > h.xml
目前進行到這一步,只能看到xml文件的內容,其工程中的java源文件還是看不到,看目錄結構下有一個classes.dex文件,我們需要將dex文件變為jar文件。
這里用到了另一個工具dex2jar。(自行搜索下載)
在Windows下解壓之後的目錄如下圖所示:

在命令行中,進入到此目錄下:
在Windows下,輸入以下命令:
dex2jar.bat c:\classes.dex
運行完之後,在C盤會多一個classes.dex.dex2jar.jar文件,此文件就是我們需要的jar文件。
利用jd-gui,將jar文件反向工程為java代碼。(請自行搜索下載)
它分為Windows、Linux、和max三個版本,這里我下載的是Windows版本的。
解壓之後,雙擊運行exe文件,選擇classes.dex.dex2jar.jar文件,相應的jar文件中的Java文件就被反向工程顯示出來了!

❼ 安卓源代碼究竟是什麼有什麼作用

源代碼是Google公司發布的最純凈的安卓系統代碼,然後再由各大手機開發公司自行優化開發。簡單的說就是原料,未經加工過的。望採納!!

❽ 如何防止android app被kill

相較於/data/app下的應用,放在/system/app下的應用享受更多的特權,比如若在其Manifest.xml文件中設置persistent屬性為true,則可使其免受out-of-memory
killer的影響。如應用程序'Phone'的AndroidManifest.xml文件:

<application
android:name="PhoneApp"
android:persistent="true"
android:label="@string/dialerIconLabel"
android:icon="@drawable/ic_launcher_phone">
...
</application>
設置後app提升為系統核心級別,任何情況下不會被kill掉, settings->applications裡面也會屏蔽掉stop操作。

這樣設置前的log: Proc #19: adj=svc /B 4067b028 255:com.xxx.xxx/10001 (started-services)

# cat /proc/255/oom_adj

4

設置後的log: PERS #19: adj=core /F 406291f0 155:com.xxx.xxx/10001 (fixed)

# cat /proc/155/oom_adj

-12 # 這是CORE_SERVER_ADJ
註:init進程的oom_adj為-16(即SYSTEM_ADJ): cat /proc/1/oom_adj

Android相關部分分析:
在文件frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中有以下的代碼:
final
ProcessRecord addAppLocked(ApplicationInfo info) {
ProcessRecord
app = getProcessRecordLocked(info.processName, info.uid);

if
(app == null) {
app
= newProcessRecordLocked(null, info, null);
mProcessNames.put(info.processName,
info.uid, app);
updateLruProcessLocked(app,
true, true);
}

if
((info.flags&(ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT))
==
(ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT)) {
app.persistent
= true;
app.maxAdj
= CORE_SERVER_ADJ; //
這個常數值為-12。
}
if
(app.thread == null && mPersistentStartingProcesses.indexOf(app)
< 0) {
mPersistentStartingProcesses.add(app);
startProcessLocked(app,
"added application", app.processName);
}

return
app;
}


見要想成為core service (即app.maxAdj =
CORE_SERVER_ADJ(-12)),應用程序需要FLAG_SYSTEM和FLAG_PERSISTENT兩個標志,FLAG_SYSTEM指
的是應用位於/system/app下,FLAG_PERSISTENT就是指persistent屬性。

而對於frameworks/base/services/java/com/android/server/SystemServer.java,則調用
ActivityManagerService.setSystemProcess();
把自己的 app.maxAdj 設置成SYSTEM_ADJ,即-16。

原理:
Android中的進程是託管的,當系統進程空間緊張的時候,會依照優先順序自動進行進程的回收。由此帶來三個問題:
1)
回收規則: 什麼時候回收與回收哪一個?
2)
避免誤殺: 如何阻止被回收?
3)
數據恢復與保存: 被回收了怎麼辦?

Android將進程分為6個等級,它們按優先順序順序由高到低依次是:
1.前台進程(
FOREGROUND_APP)
2.可視進程(VISIBLE_APP
)
3.
次要服務進程(SECONDARY_SERVER )
4.後台進程
(HIDDEN_APP)
5.內容供應節點(CONTENT_PROVIDER)
6.空進程(EMPTY_APP)

特徵:
1.如果一個進程裡面同時包含service和可視的activity,那麼這個進程應該歸於可視進程,而不是service進程。
2.另外,如果其他進程依賴於它的話,一個進程的等級可以提高。例如,一個A進程里的service被綁定到B進程里的組件上,進程A將總被認為至少和B進程一樣重要。
3.系統中的phone服務被劃分到前台進程而不是次要服務進程.

在android中,進程的oom_adj值也就代表了它的優先順序。oom_adj值越高代表該進程優先順序越低。文件/init.rc中有以下屬性設置:
setprop
ro.FOREGROUND_APP_ADJ 0
setprop
ro.VISIBLE_APP_ADJ 1
setprop
ro.SECONDARY_SERVER_ADJ 2
setprop
ro.HIDDEN_APP_MIN_ADJ 7
setprop
ro.CONTENT_PROVIDER_ADJ 14
setprop
ro.EMPTY_APP_ADJ 15
/init.rc中,將PID為1的進程(init進程)的oom_adj設置為SYSTEM_ADJ(-16):
#
Set init its forked children's oom_adj.
write
/proc/1/oom_adj -16

查看本機設置:
cat /sys/mole/lowmemorykiller/parameters/adj
0,1,2,7,14,15

回收時機:
文件/init.rc中:
setprop
ro.FOREGROUND_APP_MEM 1536 // 6M
setprop
ro.VISIBLE_APP_MEM 2048 // 8M
setprop
ro.SECONDARY_SERVER_MEM 4096 // 16M
setprop
ro.HIDDEN_APP_MEM 5120 // 20M
setprop
ro.CONTENT_PROVIDER_MEM 5632 // 22.4M
setprop
ro.EMPTY_APP_MEM 6144 // 24M
這些數字也就是對應的內存閾值,一旦低於該值,Android便開始按順序關閉相應等級的進程。
注意這些數字的單位是page: 1 page = 4 kB。所以上面的六個數字對應的就是(MB): 6,8,16,20,22,24。

查看現在的內存閾值設置:
cat /sys/mole/lowmemorykiller/parameters/minfree

要想重新設置該值(對應不同的需求):
echo "1536,2048,4096,5120,15360,23040">/sys/mole/lowmemorykiller/parameters/minfree
這樣當可用內存低於90MB的時候便開始殺死"空進程",而當可用內存低於60MB的時候才開始殺死"內容供應節點"類進程。

具體的回收實現在ActivityManagerService.java中的函數trimApplications():
1.首先移除package已被卸載的無用進程;
2.基於進程當前狀態,更新oom_adj值,然後進行以下操作:
1)
移除沒有activity在運行的進程;
2)
如果AP已經保存了所有的activity狀態,結束這個AP。
3.
最後,如果目前還是有很多activities 在運行,那麼移除那些activity狀態已經保存好的activity。

更新oom_adj的值:
在ActivityManagerService.java文件的ComputeOomAdjLocked() 中計算出進程的oom_adj,例如:
if
(app == TOP_APP) {
//
The last app on the list is the foreground app.
adj
= FOREGROUND_APP_ADJ;
app.adjType
= "top-activity";
}

Android kernel中的low memory killer
Android的Low Memory Killer根據需要(當系統內存短缺時)殺死進程釋放其內存,源代碼在kernel/drivers/misc/lowmemorykiller.c中。簡單說,就是尋找一個最合適的進程殺死,從而釋放它佔用的內存。
最合適的進程是:
• oom_adj越大
• 佔用物理內存越多

一旦一個進程被選中,內核會發送SIGKILL信號將之殺死:
for_each_process(p)
{
……
if(selected
== NULL || p->oomkilladj
> selected->oomkilladj ||
(p->oomkilladj
== selected->oomkilladj && tasksize > selected_tasksize))
{
selected
= p;
}
}
if(selected
!= NULL) {
force_sig(SIGKILL,
selected);
}

查看LRU列表:adb shell mpsys activity
當activitydemo在前台時:
包含Service的進程的優先順序比較高,在computeOomAdjLocked中將其分為了兩小類:
static
final int MAX_SERVICE_INACTIVITY = 30*60*1000;
if
(now < (s.lastActivity+MAX_SERVICE_INACTIVITY)) {
if
(adj > SECONDARY_SERVER_ADJ) {
adj
= SECONDARY_SERVER_ADJ;
app.adjType
= "started-services";
app.hidden
= false;
}
}
if
(adj > SECONDARY_SERVER_ADJ) {
app.adjType
= "started-bg-services";
}

完全讓進程不被kill是不可能的,我們可以通過一些操作,使進程被kill的幾率變小:
1)
提高進程的優先順序:
*
後台操作採用運行於前台的Service形式,因為一個運行著service的進程比一個運行著後台activity的等級高;
*
按back鍵使得進程中的activity在後台運行而不是destory,需重載back按鍵(沒有任何activity在運行的進程優先被殺).
*
依賴於其他優先順序高的進程;

2)
強制修改進程屬性:
*
在進程中設置:setPersistent(true);

*
在Manifest文件中設置(如上)。

❾ 用什麼工具打開安卓app源碼

android源代碼文件通過在Eclipse中打開就可以,前提是要把源碼導入到Eclipse中,然後ctrl+類 就可可以點擊查看。

❿ 怎麼下載安卓源碼完整版啊!現有的源碼好多點不進去,求助啊,想要深入學習學習

frameworks\base\core\java\android\app\ApplicationPackageManager.java
這個文件定義ApplicationPackageManager類,繼承並實現了PackageManager中介面;
ApplicationPackageManager使用mPM變數,這個變數是PackageManagerService的客戶端(IBinder對象),調用mPM對象中的方法,實際調用到了frameworks\base\services\java\com\android\server\pm\PackageManagerService.java文件中
的方法。
這是Java層中Binder的使用方式。
通過 grep -rnsw "extends PackageManager" * 可以找到PackageManager的實現。經常要用Linux中grep命令來查找文件。

熱點內容
房產證加密碼 發布:2025-05-11 02:49:17 瀏覽:340
伺服器少個陣列卡盤符怎麼找出來 發布:2025-05-11 02:34:07 瀏覽:635
鬥地主源碼開發 發布:2025-05-11 02:24:07 瀏覽:366
雲伺服器怎麼設置攻擊 發布:2025-05-11 02:22:09 瀏覽:826
python嵌套for循環 發布:2025-05-11 01:51:44 瀏覽:228
安卓怎麼取消後台限制 發布:2025-05-11 01:45:45 瀏覽:258
一鍵搭建sk5伺服器 發布:2025-05-11 01:40:09 瀏覽:514
鴻業acs加密鎖模擬器 發布:2025-05-11 01:38:49 瀏覽:938
神廟逃亡2安卓版怎麼玩 發布:2025-05-11 01:38:05 瀏覽:163
凱傑都什麼配置 發布:2025-05-11 01:38:04 瀏覽:472