水波摇曳 发表于 2015-2-7 18:06:02

解决修改“package”属性制作共存时,不能安装的问题

本帖最后由 水波摇曳 于 2015-2-10 10:19 编辑

我想大家都应该看过天哥那篇99%成功制作Apk共存的视频,方式就是:
修改 AndroidManifest.xml 中的“package”属性,
这样就可以保证安装后的 /data/data/文件的包名不一致,也就能到达共存的目的,但是相对于大的应用,也就是1%就可能
会出现:当你已经安装原包时,自己修改的包却安装不上的情况。曾纠结过很长时间,只简单的知道是因为安装数据文件的问题,
但一直未很明了的解决,前几天看了一个帖子,恍然大悟
原帖地址:http://www.cnblogs.com/tianxiaoz ... k_package_name.html
12年的帖子 我都堡垒+惭愧了..
帖子有点长 摘抄重要的部分:
2、修改AndroidManifest.xml中的包名,
   将package后面的包名com.tencent.qbx改为你想要的新包名,我改为了com.tianxiao.tencentweb
   将涉及原包名的com.tencent.qbx的相关activity的声明中的包名均改为新包名com.tianxiao.tencentweb
至于intent-filter里面的action名中包含原包名的,则可以不改,如果改的话,代码中也要相应的改变
   另外,如果有provider,provider的authorities也得改,这个在同一手机上必须唯一,否则安装会失败

3、在E:\apkTool\qq4\smali目录下,有很多子目录,子目录下的文件多以smali结尾,这中文件的语法有点类似于汇编语言,具体原理就不深究了。
将smali目录下的所有文件中的原包名的声明形式com/tencent/qbx改为新包名com/tianxiao/tencentweb
具体如下,用UEdit在文件中替换即可,将目标目录指向E:\apkTool\qq4\smali,这个将近1000条左右
   如果之前改为action里面的包名,也要将字符串形式的包名com.tencent.qbx改为com.tianxiao.tencentweb
   如果有provider也要讲原来的authorities值改为在AndroidManifest.xml中新改的authorities值。
如果安装失败,报错的信息是:
出错信息如下: Can't install because provider name qbx_bookmarks (in package com.tianxiao.tencentweb) is already used by com.tencent.qbx
原因是:
主要是忘了 provider的authorities的处理,
至于他说的 provider的authorities 值,下面的评论中已经说明了:
provider的authorities如同网站的域名,多个应用间不能相同,不修改就会报错,试试就知道。 。。
有人还贴出了一段代码:
<provider android:name="com.amazon.kindle.contentprovider.ExternalQueryRouter" android:permission="com.amazon.CONTENT_PROVIDER_ACCESS" android:exported="true" android:authorities="com.amazon.kindle.bookmetadataprovider" android:syncable="false" />
      <provider android:name="com.amazon.kcp.content.KindleDownloadProvider" android:permission="com.amazon.CONTENT_PROVIDER_ACCESS" android:exported="true" android:authorities="com.amazon.kindle.downloadprogressprovider" android:syncable="false" />
      <provider android:name="com.amazon.kcp.search.SearchProvider" android:exported="false" android:authorities="kindle" android:syncable="false" />
      <provider android:name="com.amazon.kcp.search.ReaderSearchProvider" android:exported="false" android:authorities="kindlereader" android:syncable="false" />

所以以后制作共存时,如果出现安装不上的问题,那还是老实全局修改关键词吧..
具体步骤我博客里有..

希望懂得编程的童鞋好好解释下 provider的authorities的属性哈 求明确下..

同样隐藏几天..
支持论坛




kanon 发表于 2015-2-7 18:11:25

恩恩 多谢分享 3q

花墨 发表于 2015-2-7 18:12:13

收藏,回家看

永恒丶 发表于 2015-2-7 18:14:21

顶!!!

烈火 发表于 2015-2-7 18:14:46

Good! 从未做过共存,说不定下次就用上

默小坑 发表于 2015-2-7 18:15:38

学习了。。

海鸥 发表于 2015-2-7 18:18:36

跟着大神学习

dayeve 发表于 2015-2-7 18:21:52

2个包里不能有一样provider 是无法安装的
authorities属性是 provider所在的包名+provider的名称

dayeve 发表于 2015-2-7 18:23:10

果然预料之内 你安装不上是因为provider 问题{:4_97:}

guangz 发表于 2015-2-7 20:12:48

恍然大悟
页: [1] 2 3 4
查看完整版本: 解决修改“package”属性制作共存时,不能安装的问题