日韩性视频-久久久蜜桃-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 添加安装权限白名单的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美精品久久久久久久久 | 人人爱超碰 | 国产成人高清 | 日韩一区二区三区四区五区 | 超碰97在线播放 | 日韩精品无码一区二区 | 欧美有码视频 | 一区二区三区日韩电影 | 偷看洗澡一二三区美女 | 欧美一及片 | 艳妇乳肉豪妇荡乳av | 久久av片| 黄色小毛片 | 国产精品久久久久久久免费观看 | 一区二区三区免费在线 | 日韩av手机在线播放 | 久在线观看视频 | 四虎影视最新网址 | 蜜桃中文字幕 | 91caob| 99爱这里只有精品 | 爽爽窝窝午夜精品一区二区 | 性一交一乱一色一视频麻豆 | 怡红院男人天堂 | 秘密基地在线观看完整版免费 | 天天干夜夜干 | 国产精品成人一区二区网站软件 | 香蕉视频免费网站 | 麻豆精品在线视频 | 亚洲天堂免费在线 | 少妇av| 人人人超碰 | 欧美色射| 麻豆精品国产传媒mv男同 | 精品一区二区三区久久久 | 不卡日韩 | 黄色片a| 久久精品欧美一区二区三区不卡 | 色碰视频 | 国产在线观看免费视频软件 | hs网站在线观看 | 国产乱码精品1区2区3区 | 丝袜国产在线 | 黄色片播放器 | 欧美野外猛男的大粗鳮 | 国产青青在线 | 精品国产乱码一区二区三区99 | 给我免费观看片在线电影的 | 久久亚洲综合网 | 六月丁香婷婷激情 | 毛片基地免费 | 91精品国产综合久久精品 | 亚洲熟妇色自偷自拍另类 | 国产精品美女毛片真酒店 | 老湿机69福利区午夜x片 | 日本激情在线 | 亚洲区视频在线观看 | 亚洲品质自拍 | 小妹色播影院 | avtt在线播放 | a√在线观看| 天天艹av | 久久精工是国产品牌吗 | 影音先锋婷婷 | 538精品一线| 免费黄色在线视频 | 俺也去网站 | wwwxxx在线观看 | 比利时xxxx性hd极品 | 欧美日韩精品久久久免费观看 | 亚洲国产黄 | 超碰人人干 | 男女日批在线观看 | 久久视精品 | 国产人妻人伦精品1国产盗摄 | 中文字幕亚洲第一 | 老女人丨91丨九色 | 插综合| 久久久久国产精品一区 | 国产性70yerg老太 | 欧美性猛交ⅹxx | 久草福利免费 | 国精品人妻无码一区二区三区喝尿 | 久久亚洲综合国产精品99麻豆精品福利 | 午夜做爰xxxⅹ性高湖视频美国 | 日本最黄网站 | 久久成人毛片 | 秋霞影院av | 国产女18毛片多18精品 | 日本在线一级片 | 色天天综合网 | 国产成人精品免费看视频 | 欧美亚洲综合在线 | 神马影院午夜伦理片 | 久久成年 | 人人干人 | 蜜桃视频在线观看www | 久久久久久久无码 | 阿的白色内裤hd中文 |