怎样将应用工程在一个Android设备中安装成多个应用
2294 点击·0 回帖
![]() | ![]() | |
![]() | 一、必须修改: 1、修改package: AndroidManifest.xml里面的package,是一个Android应用在系统中的唯一标识,package相同的客户端在安装时会尝试覆盖(低版本不能覆盖高版本、不同数字签名的不能覆盖),应用在手机中的存储空间也是以package来命名的。(Application及Activity如果使用的相对路径,也需要修改) package="com.diandian" => package="com.diandian2_3_2" 2、修改R文件: 因为R文件是ADT自动生成的,保存在以应用package命名的文件夹下,所以修改了package后,应用中引入的R文件也需要修改。 import com.diandian.R => import com.diandian2_3_2.R 3、修改layout布局中的XML命名空间: 如果应用中使用到了自定义组件的自定义属性,就需要在布局XML的开头生命需要使用自定义命名空间中的属性,如: xmlns:diandian="http://schemas.android.com/apk/res/com.diandian" 最后的com.diandian就是使用的package,所以如果package变了,xmlns也需要修改。 xmlns:diandian="http://schemas.android.com/apk/res/com.diandian" => xmlns:diandian="http://schemas.android.com/apk/res/com.diandian2_3_2" 二、应该修改: 经过以上三处修改,这个工程应该就可以作为一个新的应用安装到手机中了,但是为了让新老应用之间完全没有冲突,应该至少还有以下两处需要考虑修改: 1、SD卡中的文件目录名 这个容易理解,如果应用存储文件会产生冲突,则需要将两个应用的SD卡中的存储目录名也分开 String APP_FOLDER_NAME = "diandian"->String APP_FOLDER_NAME = "diandian2_3_2" 2、在Activity、Service、BroadCast间跳转时,如果使用的是隐式Intent调用时,一般都设定了IntentFilter(像是Action、Scheme等),两个应用中相同的IntentFilter都 会接收相同的Intent,一个很容易出现的情况是,从一个程序中发广播,两个程序都可以接收到 | |
![]() | ![]() |