apk修改编译后重签名与提取修改的文件替换到原apk中的区别
不懂的请飘过
在安装的时候,Android给予每个程序包不同的Linux用户ID。软件包在设备上的生命周期中身份标识保持不变在。在不同的设备上,同样的软件包有着不同的身份标识,重要的是每个包都有不同的身份标识在给定的设备上。
安全在进程级别上实现,任意两个程序包的代码不能正常运行在同一进程中,因为他们需要以不同的Linux用户运行。可以使用每个程序包的AndroidManifest.xml中的manifest标签中的shareUserId属性将它们分配相同的用户ID。这样做的主要目的是为了安全,这两个包将被视作为同一个应用程序,拥有相同的用户ID和文件的权限。为了保持安全,只有具有相同签名(并请求同样的sharedUserId)的应用程序才会分配通用的用户ID。这个sharedUserId在框架程序的AndroidManifest.xml里可以看到任何由应用程序存储的数据将被赋予应用程序的用户ID,正常情况不能被其它应用程序访问。当使用
getSharedPreferences(String,int)
或者
openFileOutput(String,int)
或者
openOrCreateDatabase(String,int, SQLiteDatabase.CursorFactory)
创建一个新的文件(res)时,可以使用MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE标志允许任何其他应用程序来读/写入文件。当设置这些标志,该文件仍然为创建文件的应用程序所拥有,但其全局读写权限已经被设置,所以任何其他应用程序可以看到它。
<center><h1>xyde.cn/my>
也就是说,重签名导致了该apk与系统apk的原签名不一致。该apk将无法在使用系统资源框架中的共享资源。造成资源缺失,很明显,就会出错。
而替换修改的xml或资源不会改变原签名。以上安卓的安全策略就会成功为修改后的apk放行。