成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

當(dāng)你的App想"串門(mén)"時(shí):Android不同UID怎么互相訪問(wèn)資源?

移動(dòng)開(kāi)發(fā) Android
默認(rèn)情況下這些應(yīng)用就像住在不同小區(qū)的住戶——你家防盜門(mén)密碼只有自己知道,別人根本進(jìn)不來(lái)。那如果真有需要"串門(mén)"的情況怎么辦?咱們今天就扒一扒應(yīng)用之間"開(kāi)后門(mén)"姿勢(shì)。

先回憶下上次聊的:Android 中每個(gè)應(yīng)用程序都有一個(gè)唯一的 UID,這個(gè) UID 用來(lái)標(biāo)識(shí)程序所擁有的資源,比如文件目錄、數(shù)據(jù)庫(kù)訪問(wèn)、網(wǎng)絡(luò)、傳感器和日志等。默認(rèn)情況下應(yīng)用之間是不能互相訪問(wèn)資源的。

默認(rèn)情況下這些應(yīng)用就像住在不同小區(qū)的住戶——你家防盜門(mén)密碼只有自己知道,別人根本進(jìn)不來(lái)。那如果真有需要"串門(mén)"的情況怎么辦?咱們今天就扒一扒應(yīng)用之間"開(kāi)后門(mén)"姿勢(shì)。

1?? 共享UID:穿同一條褲衩

適用場(chǎng)景:同一開(kāi)發(fā)者的多應(yīng)用深度整合

<!-- 在多個(gè)應(yīng)用的 AndroidManifest.xml 中聲明相同 UID -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.reathin.app1"
    android:sharedUserId="com.reathin.shareuid">

就像兩個(gè)租客合租一間房,用同一個(gè)門(mén)鎖密碼(UID)。注意:

  • 必須用同一個(gè)簽名文件打包(相當(dāng)于合租合同要蓋同一個(gè)公章)
  • 裝完應(yīng)用就不能改簽名了(房東不讓中途換鎖)
  • 能互相訪問(wèn)私有目錄/data/data/pkg_name

2?? 文件權(quán)限大放送

適用場(chǎng)景:臨時(shí)文件傳輸(如應(yīng)用更新包)

在創(chuàng)建文件時(shí)手動(dòng)設(shè)置權(quán)限:

val file = File(getExternalFilesDir(null), "shared_file.txt")
// 第二個(gè)參數(shù)false=給所有人讀權(quán)限
file.setReadable(true, false)  

// 其他應(yīng)用通過(guò)絕對(duì)路徑訪問(wèn)(需知道準(zhǔn)確路徑)
val externalDir = File("/storage/emulated/0/Android/data/com.reathin.app1/files")
val sharedFile = File(externalDir, "shared_file.txt")

這就相當(dāng)于在自家門(mén)口放個(gè)帶密碼的快遞柜,把密碼寫(xiě)在便利貼上。注意:

  • Android 7后禁止 MODE_WORLD_READABLE
  • Android 10開(kāi)始用Scoped Storage后這招不好使了(物業(yè)升級(jí)了門(mén)禁系統(tǒng))
  • 建議改用MediaStore或者SAF(存儲(chǔ)訪問(wèn)框架)

3?? ContentProvider:開(kāi)個(gè)小賣(mài)部窗口

適用場(chǎng)景:跨應(yīng)用數(shù)據(jù)共享(如讀取通訊錄、共享配置)

<!-- 在數(shù)據(jù)提供方聲明權(quán)限 -->
<provider
    android:name=".MyProvider"
    android:authorities="com.reathin.provider"
    android:readPermission="com.reathin.READ_DATA"
    android:exported="true"/>
// 數(shù)據(jù)請(qǐng)求方申請(qǐng)權(quán)限(需在 Manifest 聲明)
if (checkSelfPermission("com.reathin.READ_DATA") == PERMISSION_GRANTED) {
    contentResolver.query(Uri.parse("content://com.reathin.provider/data"), ...)
}

在小區(qū)里開(kāi)個(gè)小賣(mài)部,別人通過(guò)指定窗口買(mǎi)東西。記得:

  • 配置android:permission限制訪問(wèn)權(quán)限(裝個(gè)防盜門(mén)鈴)
  • 用android:grantUriPermissions臨時(shí)授權(quán)(給訪客發(fā)一次性門(mén)禁卡)

4?? Binder跨進(jìn)程通信:空中傳物

通過(guò)AIDL接口傳遞數(shù)據(jù):

// 服務(wù)端
publicclass MyService extends Service {

    privatefinal IMyAidlInterface.Stub binder = new IMyAidlInterface.Stub() {
        public String getSecretData() {
            return"隔壁老王家的WiFi密碼是12345678";
        }
    };
    
    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }
}

// 客戶端
IMyAidlInterface service = IMyAidlInterface.Stub.asInterface(binder);
String data = service.getSecretData();

相當(dāng)于兩家陽(yáng)臺(tái)離得近,直接拋接物品。但要注意:

  • 要處理跨進(jìn)程異常(小心沒(méi)接住摔壞東西)
  • 別傳敏感數(shù)據(jù)(扔個(gè)蘋(píng)果還行,金條容易被劫)

5?? 反射大法:偷物業(yè)萬(wàn)能卡

try {
    Class<?> clazz = Class.forName("android.app.ActivityThread");
    Method method = clazz.getDeclaredMethod("getPackageInfo", String.class, int.class);
    Object packageInfo = method.invoke(null, "com.reathin.app3", 0);
    // 然后就能拿到別人的資源ID...
} catch (Exception e) {
    // 大概率被系統(tǒng)保安抓住
}

這種操作就像偽造門(mén)禁卡,某些機(jī)型能成功。

  • 不同Android版本會(huì)失效(物業(yè)定期換鎖)
  • 上架應(yīng)用市場(chǎng)必被拒審(被監(jiān)控拍到)

總結(jié)

方式

推薦指數(shù)

適用場(chǎng)景

翻車(chē)概率

共享UID

??

自家兄弟應(yīng)用

ContentProvider

????

需要精細(xì)控制的數(shù)據(jù)共享

Binder通信

???

實(shí)時(shí)交互的功能模塊

文件權(quán)限

??

低版本Android的臨時(shí)方案

反射/黑科技

?

測(cè)試環(huán)境玩玩就行

極高

現(xiàn)在的Android系統(tǒng)就像高檔小區(qū),物業(yè)(系統(tǒng)權(quán)限)管得越來(lái)越嚴(yán)。能走正門(mén)就別爬水管,保不準(zhǔn)哪天就被逮到封號(hào)了!

責(zé)任編輯:武曉燕 來(lái)源: 沐雨花飛碟
相關(guān)推薦

2016-11-24 14:44:49

云計(jì)算

2020-12-23 13:26:53

代碼麻省理工學(xué)院語(yǔ)言

2010-06-04 10:46:18

同事上司

2016-11-04 19:44:52

android移動(dòng)應(yīng)用開(kāi)發(fā)icon

2015-04-17 09:27:04

程序員

2017-10-11 08:40:29

VR服務(wù)器移動(dòng)端

2023-04-24 08:11:02

圖片alt語(yǔ)音

2017-09-04 17:35:27

麻省理工學(xué)院細(xì)菌乳膠

2022-06-21 08:03:49

RBAC 限制容器

2021-06-04 10:56:32

分庫(kù)數(shù)據(jù)庫(kù)查詢

2025-04-01 08:50:48

2018-05-21 09:30:04

操作系統(tǒng)Linux資源

2013-03-01 12:10:47

2009-07-27 16:30:49

母版資源ASP.NET網(wǎng)頁(yè)模板

2011-05-03 16:58:55

噴墨打印機(jī)墨水

2009-02-19 15:40:00

Linux不同網(wǎng)段訪問(wèn)

2013-07-30 15:24:53

App應(yīng)用體驗(yàn)

2024-07-31 08:21:53

2021-05-13 07:32:17

培訓(xùn)代碼同事

2011-01-25 08:55:39

HTML 5webW3C
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲手机视频在线 | 日韩国产精品一区二区三区 | 精品中文字幕视频 | a级免费视频 | 午夜免费视频观看 | 亚洲国产69| 色综合色综合色综合 | 人人擦人人 | 91精品国模一区二区三区 | 亚洲国产精品一区二区三区 | 中文字幕日韩一区 | 九色91视频 | 亚洲系列第一页 | 国产黄色av网站 | 亚洲国产网 | 国产精品久久久亚洲 | 日韩视频―中文字幕 | 久久精品二区 | 午夜av影院 | 久久精品97| 中文字幕在线看人 | 国产高清视频 | 国产成人精品午夜 | 亚洲人成免费 | 国产日韩一区二区 | 中文区中文字幕免费看 | 精品国产18久久久久久二百 | 中文字幕亚洲一区二区三区 | 免费午夜视频 | 国产激情91久久精品导航 | av天天操 | 免费在线观看一区二区 | www.亚洲一区二区 | 欧美一级久久 | 欧美片网站免费 | 国产精品99一区二区 | 欧美激情一区二区三级高清视频 | 天天曰夜夜操 | 久久精品免费一区二区三 | 一区二区三区四区五区在线视频 | 久久国内精品 |