日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 添加安装权限白名单

發布時間:2025/4/16 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 添加安装权限白名单 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊打開鏈接

有些項目不允許所有APK都擁有安裝權限,例如apk只能通過應用商城來安裝或者升級,只允許某些特定的apk自升級,不允許pm install等。這就需要添加安裝權限白名單來控制。

1、packageManagerService修改

安裝肯定繞不開packageManagerService,我們在其中添加幾個接口及代碼來控制apk安裝。

1)增加以下函數:

/*add for installer white list*/private boolean isInstallerEnable(String packagename){ArrayList<String> whiteListApp = new ArrayList<String>();try{BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("/system/etc/WhiteListAppFilter.properties")));String line ="";while ((line = br.readLine()) != null){whiteListApp.add(line);}br.close();}catch(java.io.FileNotFoundException ex){return false;}catch(java.io.IOException ex){return false;}Iterator<String> it = whiteListApp.iterator();while (it.hasNext()) {String whitelisItem = it.next();if (whitelisItem.equals(packagename)) {return true;}}return false;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

isInstallerEnable函數會去讀取白名單文件/system/etc/WhiteListAppFilter.properties,然后和我們傳進來的包名進行匹配,在白名單中返回true,其他情況均返回false。

2)獲取調用的包名?
這個可以在installPackageWithVerificationAndEncryption函數中來獲取,

if (uid == Process.SHELL_UID || uid == 0) {if (DEBUG_INSTALL) {Slog.v(TAG, "Install from ADB");}filteredFlags = flags | PackageManager.INSTALL_FROM_ADB;} else {filteredFlags = flags & ~PackageManager.INSTALL_FROM_ADB;}verificationParams.setInstallerUid(uid);//add for installer white listmCallingApp = mContext.getPackageManager().getNameForUid(uid);Log.d(TAG, "!!!!!!!!!!!!!callingApp = " + mCallingApp);//endfinal Message msg = mHandler.obtainMessage(INIT_COPY);msg.obj = new InstallParams(packageURI, observer, filteredFlags, installerPackageName,verificationParams, encryptionParams, user);mHandler.sendMessage(msg);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

接下來要在installPackageLI函數對調用安裝的apk進行匹配,判斷是否在白名單中,如果不在的話則提示錯誤,錯誤碼是-xxx(自己定義),這個錯誤碼會給packageInstaller,packageInstaller中需要做什么,就由自己定義了。

//add for installer white listboolean caninstall =false;if(mCallingApp != null && isInstallerEnable(mCallingApp)){caninstall = true;}if(!caninstall){Toast.makeText(mContext, R.string.install_error, Toast.LENGTH_LONG).show();res.returnCode = -xxx;return;}//endif (DEBUG_INSTALL) Slog.d(TAG, "installPackageLI: path=" + tmpPackageFile);// Retrieve PackageSettings and parse packageint parseFlags = mDefParseFlags | PackageParser.PARSE_CHATTY| (forwardLocked ? PackageParser.PARSE_FORWARD_LOCK : 0)| (onSd ? PackageParser.PARSE_ON_SDCARD : 0);...省略
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3)?
/system/etc/WhiteListAppFilter.properties內容如下,在編譯時可以在mk中修改拷貝到etc目錄下,例如下面就是允許這三個包名有安裝權限。

com.xxx.xxx1?
com.xxx.xxx2?
com.xxx.xxx3

2、pm install的修改

上面說了,還要禁止pm install,因為有些APK安裝竟然是調用pm install命令去安裝的。。。。?
修改要在pm.java修改,修改方法和上面基本一致。?
可以看到,pm install其實調用的是run再去判斷參數。

public static void main(String[] args) {new Pm().run(args);}public void run(String[] args) {...省略if ("install".equals(op)) {runInstall();return;}...省略
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

那我們要添加的話,先獲取app名,再和packageManagerService一樣,增加isInstallerEnable去判斷是不是要調用runInstall()就OK了。

String callingApp = "";try {callingApp = mPm.getNameForUid(Binder.getCallingUid());} catch(RemoteException re) {Log.e("Pm", Log.getStackTraceString(new Throwable())); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

總結

以上是生活随笔為你收集整理的android 添加安装权限白名单的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。