Merge "PackageManagerService: always install native binaries from .apk" into kraken
This commit is contained in:
committed by
Android (Google) Code Review
commit
e0cbd72b33
@@ -3648,21 +3648,19 @@ class PackageManagerService extends IPackageManager.Stub {
|
||||
|
||||
installedNativeLibraries = true;
|
||||
|
||||
// Always extract the shared library
|
||||
String sharedLibraryFilePath = sharedLibraryDir.getPath() +
|
||||
File.separator + libFileName;
|
||||
File sharedLibraryFile = new File(sharedLibraryFilePath);
|
||||
if (! sharedLibraryFile.exists() ||
|
||||
sharedLibraryFile.length() != entry.getSize() ||
|
||||
sharedLibraryFile.lastModified() != entry.getTime()) {
|
||||
if (Config.LOGD) {
|
||||
Log.d(TAG, "Caching shared lib " + entry.getName());
|
||||
}
|
||||
if (mInstaller == null) {
|
||||
sharedLibraryDir.mkdir();
|
||||
}
|
||||
cacheNativeBinaryLI(pkg, zipFile, entry, sharedLibraryDir,
|
||||
sharedLibraryFile);
|
||||
|
||||
if (Config.LOGD) {
|
||||
Log.d(TAG, "Caching shared lib " + entry.getName());
|
||||
}
|
||||
if (mInstaller == null) {
|
||||
sharedLibraryDir.mkdir();
|
||||
}
|
||||
cacheNativeBinaryLI(pkg, zipFile, entry, sharedLibraryDir,
|
||||
sharedLibraryFile);
|
||||
}
|
||||
if (!hasNativeLibraries)
|
||||
return PACKAGE_INSTALL_NATIVE_NO_LIBRARIES;
|
||||
@@ -3704,18 +3702,16 @@ class PackageManagerService extends IPackageManager.Stub {
|
||||
String installGdbServerPath = installGdbServerDir.getPath() +
|
||||
"/" + GDBSERVER;
|
||||
File installGdbServerFile = new File(installGdbServerPath);
|
||||
if (! installGdbServerFile.exists() ||
|
||||
installGdbServerFile.length() != entry.getSize() ||
|
||||
installGdbServerFile.lastModified() != entry.getTime()) {
|
||||
if (Config.LOGD) {
|
||||
Log.d(TAG, "Caching gdbserver " + entry.getName());
|
||||
}
|
||||
if (mInstaller == null) {
|
||||
installGdbServerDir.mkdir();
|
||||
}
|
||||
cacheNativeBinaryLI(pkg, zipFile, entry, installGdbServerDir,
|
||||
installGdbServerFile);
|
||||
|
||||
if (Config.LOGD) {
|
||||
Log.d(TAG, "Caching gdbserver " + entry.getName());
|
||||
}
|
||||
if (mInstaller == null) {
|
||||
installGdbServerDir.mkdir();
|
||||
}
|
||||
cacheNativeBinaryLI(pkg, zipFile, entry, installGdbServerDir,
|
||||
installGdbServerFile);
|
||||
|
||||
return PACKAGE_INSTALL_NATIVE_FOUND_LIBRARIES;
|
||||
}
|
||||
return PACKAGE_INSTALL_NATIVE_NO_LIBRARIES;
|
||||
@@ -3729,6 +3725,16 @@ class PackageManagerService extends IPackageManager.Stub {
|
||||
// one if ro.product.cpu.abi2 is defined.
|
||||
//
|
||||
private int cachePackageSharedLibsLI(PackageParser.Package pkg, File scanFile) {
|
||||
// Remove all native binaries from a directory. This is used when upgrading
|
||||
// a package: in case the new .apk doesn't contain a native binary that was
|
||||
// in the old one (and thus installed), we need to remove it from
|
||||
// /data/data/<appname>/lib
|
||||
//
|
||||
// The simplest way to do that is to remove all files in this directory,
|
||||
// since it is owned by "system", applications are not supposed to write
|
||||
// anything there.
|
||||
removeNativeBinariesLI(pkg);
|
||||
|
||||
String cpuAbi = Build.CPU_ABI;
|
||||
try {
|
||||
int result = cachePackageSharedLibsForAbiLI(pkg, scanFile, cpuAbi);
|
||||
|
||||
Reference in New Issue
Block a user