am e0cbd72b: Merge "PackageManagerService: always install native binaries from .apk" into kraken

This commit is contained in:
David 'Digit' Turner
2010-06-07 14:04:20 -07:00
committed by Android Git Automerger

View File

@@ -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);