<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/android-many-apk-share-data/</link>
<title><![CDATA[Android中多个APK共享数据]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[编程杂谈]]></category>
<pubDate>Fri, 15 Oct 2010 06:30:30 +0000</pubDate> 
<guid>https://www.heckjj.com/android-many-apk-share-data/</guid> 
<description>
<![CDATA[ 
	<span style="font-family: 微软雅黑;">Android 多个APK共享数据(Shared User ID)：<br/><br/>Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux 用户<br/>(Android 系统是基于Linux)的.<br/>所以不同APK(用户)间互相访问数据默认是禁止的.<br/>但是它也提供了2种APK间共享数据的形式:<br/>1. Share Preference. / Content Provider<br/>APK可以指定接口和数据给任何其他APK读取. 需要自己实现接口和Share的数据.<br/>本文对于这个不做详细解释<br/><br/>2. Shared User id<br/>通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是<br/>可以互相访问任意数据. 也可以配置成运行成不同的进程, 同时可以访问其他APK的数据目录下的<br/>数据库和文件.就像访问本程序的数据一样.<br/>比如某个公司开发了多个Android 程序, 那么可以把数据,图片等资源集中放到APK&nbsp;&nbsp;A中去. 然后<br/>这个公司的所有APK都使用同一个User ID, 那么所有的资源都可以从APK A中读取.</span><span style="font-family: 微软雅黑;"><br/><br/>举个例子:<br/>APK A 和APK B 都是C公司的产品,那么如果用户从APK A中登陆成功.那么打开APK B的时候就不用<br/>再次登陆. 具体实现就是 A和B设置成同一个User ID:<br/>&nbsp;&nbsp;&nbsp;&nbsp;* 在2个APK的AndroidManifest.xml 配置User ID:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;package=&quot;com.android.demo.a1&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;android:sharedUserId=&quot;com.c&quot;&gt;<br/>&nbsp;&nbsp; 这个&quot;com.c&quot; 就是user id, 然后packagename APK A就是上面的内容,&nbsp;&nbsp;APK B可能<br/>&nbsp;&nbsp; 是&quot;com.android.demo.b1&quot; 这个没有限制<br/><br/>这个设定好之后, APK B就可以像打开本地数据库那样 打开APK A中的数据库了.<br/>APK A把登陆信息存放在A的数据目录下面. APK B每次启动的时候读取APK A下面的数据库<br/>判断是否已经登陆:<br/>APK B中的代码:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;friendContext = this.createPackageContext(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;com.android.demo.a1&quot;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context.CONTEXT_IGNORE_SECURITY);<br/>通过A的package name 就可以得到A的 packagecontext<br/>通过这个context就可以直接打开数据库.</span><br/>Tags - <a href="https://www.heckjj.com/tags/%25E7%25A7%25BB%25E5%258A%25A8%25E5%25BC%2580%25E5%258F%2591/" rel="tag">移动开发</a> , <a href="https://www.heckjj.com/tags/%25E6%2589%258B%25E6%259C%25BA%25E5%25BC%2580%25E5%258F%2591/" rel="tag">手机开发</a> , <a href="https://www.heckjj.com/tags/android/" rel="tag">android</a>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/android-many-apk-share-data/#blogcomment</link>
<title><![CDATA[[评论] Android中多个APK共享数据]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.heckjj.com/android-many-apk-share-data/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>