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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android之用sharedUserId来实现不同应用(APK)数据共享

發布時間:2023/12/4 Android 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android之用sharedUserId来实现不同应用(APK)数据共享 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

android:sharedUserId

當APK安裝的時候,userid這個標志就會產生。APK在設備上的整個生命周期中,這個ID不再改變。不同設備上同一個應用包可能有不同的userid,重要的是在給定的設備上,每個應用包有自己獨立的userid。

userid的特點:

1. 作為APK身份的標識 2. userid對應一個Linux用戶,所以不同APK(用戶)間互相訪問數據默認是禁止的.

?

那么不同APK之間想要互相訪問數據應該怎么辦呢?

Android為我們提供了兩種數據互訪的方法:

一是使用Share Preference. / Content Provider

APK通過指定接口和數據供其它APK讀取,開發者需要實現接口和指定share的數據。【此方法后面再詳細講解】

二是在配置文件manifest中配置相同的UserId

通過共享userid,擁有相同userid的用戶可以配置成運行在同一進程當中,因此默認就是可以互相訪問任意數據的

也可以配置為不同進程當中,彼此之間就像訪問自己的數據一樣訪問彼此的數據庫和文件。

例子:

應用程序1:com.wirelessqa.sqlite

01 <manifestxmlns:android="http://schemas.android.com/apk/res/android"
02 ????package="com.wirelessqa.sqlite"
03 ?
04 ????android:versionCode="1"
05 ?
06 ????android:versionName="1.0"
07 ?
08 ????android:sharedUserId="wirelessqa.com"
09 ?
10 ????>

?

應用程序2:com.wirelessqa.activity

1 <manifestxmlns:android="http://schemas.android.com/apk/res/android"
2 ????package="com.wirelessqa.activity"
3 ????android:versionCode="1"
4 ????android:versionName="1.0"
5 ????android:sharedUserId="wirelessqa.com"
6 ????>

?

這兩個應用程序的userid相同,都為wirelessqa.com,因此兩個應用程序共享userid,如果1想訪問2的數據怎么辦呢?

Content content = this.createPackageContent(“com.wirelessqa.activity”,Content.CONTENT_IGNORE_SECURITY);

這樣通過content可以獲取到應用2中的資源,包括:數據庫,preference,資源文件等等

?

注意:

基于安全考慮,兩個package需要有相同的簽名,否則沒有驗證,應用程序一旦設置了shareuserid,當程序被破解,其它應用也可以訪問我們的數據,數據不安全設置共享也就沒有多大意義了。

?

總結:

如果想要不同的APK之間共享數據需要滿足以下條件:

1.APK的簽名必須相同

2.android:shareUserId的值必須相同

3.如果想要運行在同一個進行當中,必須設置android:process的值相同。

application設置應用程序的全部組件都運行在某個線程中

view source
1 <application?android:allowBackup="true"?android:icon="@drawable/ic_launcher"?android:label="@string/app_name"
2 ?
3 ????????android:theme="@style/AppTheme"?android:process="wqa.com">

?

android:sharedUserLabel

這個屬性給共享的userid定義了一個用戶可讀的標簽。這個標簽必須字符串資源來設置,不能使原生的字符串。

這個屬性在API Level 3中被引入,只有在sharedUserId屬性被設置,這個屬性才有意義。

總結

以上是生活随笔為你收集整理的Android之用sharedUserId来实现不同应用(APK)数据共享的全部內容,希望文章能夠幫你解決所遇到的問題。

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