У меня была такая же потребность, и после 2 дней тяжелых исследований я нашел решение этой проблемы.Это не просто и требует, чтобы вы также могли изменять системный код Android.
В основном PackageManagerService не позволяет системным приложениям распаковывать свои собственные двоичные файлы (файлы .so), если они не были обновлены.Таким образом, единственный способ исправить это - изменить PMS.java (названный метко, поскольку попытка решить эту проблему приводит меня в ужасное настроение).
При первой загрузке системы я проверяю каждый системный пакет на наличие собственных двоичных файловнаписав функцию isPackageNative (PackageParser.Package pkg):
private boolean isPackageNative(PackageParser.Package pkg) throws IOException {
final ZipFile zipFile = new ZipFile(pkg.mPath);
final Enumeration<? extends ZipEntry> privateZipEntries = zipFile.entries();
while (privateZipEntries.hasMoreElements()) {
final ZipEntry zipEntry = privateZipEntries.nextElement();
final String zipEntryName = zipEntry.getName();
if(true) Log.e(TAG, " Zipfile entry:"+zipEntryName);
if (zipEntryName.endsWith(".so")) {
zipFile.close();
return true;
}
}
zipFile.close();
return false;
}
Эта функция проверяет каждый пакет на наличие собственной библиотеки, и, если она есть, я ее распаковываю.PMS выполняет эту проверку в scanPackageLI (....).Найдите следующий метод в методе:
if (isSystemApp(pkg) && !isUpdatedSystemApp(pkg))
и добавьте проверку isPackageNative (pkg).Требуются другие небольшие модификации, но вы, вероятно, поймете это, как только у вас появится это направлениеНадеюсь, это поможет!