diff options
Diffstat (limited to 'packages/DefaultContainerService')
22 files changed, 103 insertions, 29 deletions
diff --git a/packages/DefaultContainerService/res/values-cs/strings.xml b/packages/DefaultContainerService/res/values-cs/strings.xml index 0179e8596dc2..216d715996c7 100644 --- a/packages/DefaultContainerService/res/values-cs/strings.xml +++ b/packages/DefaultContainerService/res/values-cs/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Media Container Service"</string> + <string name="service_name" msgid="4841491635055379553">"Package Access Helper"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-da/strings.xml b/packages/DefaultContainerService/res/values-da/strings.xml index 0179e8596dc2..5243028ed9da 100644 --- a/packages/DefaultContainerService/res/values-da/strings.xml +++ b/packages/DefaultContainerService/res/values-da/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Media Container Service"</string> + <string name="service_name" msgid="4841491635055379553">"Hjælp til pakkeadgang"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-de/strings.xml b/packages/DefaultContainerService/res/values-de/strings.xml index 5d12956cd70c..216d715996c7 100644 --- a/packages/DefaultContainerService/res/values-de/strings.xml +++ b/packages/DefaultContainerService/res/values-de/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Medien-Containerdienst"</string> + <string name="service_name" msgid="4841491635055379553">"Package Access Helper"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-el/strings.xml b/packages/DefaultContainerService/res/values-el/strings.xml index b0b5794d932d..a4d81441b363 100644 --- a/packages/DefaultContainerService/res/values-el/strings.xml +++ b/packages/DefaultContainerService/res/values-el/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Υπηρεσία Media Container"</string> + <string name="service_name" msgid="4841491635055379553">"Βοηθός πρόσβασης πακέτου"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-es-rUS/strings.xml b/packages/DefaultContainerService/res/values-es-rUS/strings.xml index cf893de98d73..670c2c570d88 100644 --- a/packages/DefaultContainerService/res/values-es-rUS/strings.xml +++ b/packages/DefaultContainerService/res/values-es-rUS/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Servicio de contención de medios"</string> + <string name="service_name" msgid="4841491635055379553">"Asist. p/acceder al paq."</string> </resources> diff --git a/packages/DefaultContainerService/res/values-es/strings.xml b/packages/DefaultContainerService/res/values-es/strings.xml index 68175209530a..022c461379d1 100644 --- a/packages/DefaultContainerService/res/values-es/strings.xml +++ b/packages/DefaultContainerService/res/values-es/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Servicio de contenedor de medios"</string> + <string name="service_name" msgid="4841491635055379553">"Ayudante acceso a paquete"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-fr/strings.xml b/packages/DefaultContainerService/res/values-fr/strings.xml index 3b4a90d02979..5c458bcaddd8 100644 --- a/packages/DefaultContainerService/res/values-fr/strings.xml +++ b/packages/DefaultContainerService/res/values-fr/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Service de support multimédia"</string> + <string name="service_name" msgid="4841491635055379553">"Aide accès au package"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-it/strings.xml b/packages/DefaultContainerService/res/values-it/strings.xml index 55bd6e520680..216d715996c7 100644 --- a/packages/DefaultContainerService/res/values-it/strings.xml +++ b/packages/DefaultContainerService/res/values-it/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Servizio Media Container"</string> + <string name="service_name" msgid="4841491635055379553">"Package Access Helper"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-ja/strings.xml b/packages/DefaultContainerService/res/values-ja/strings.xml index dc1dfea9428a..2f57e4eda475 100644 --- a/packages/DefaultContainerService/res/values-ja/strings.xml +++ b/packages/DefaultContainerService/res/values-ja/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"メディアコンテナサービス"</string> + <string name="service_name" msgid="4841491635055379553">"パッケージアクセス支援ツール"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-ko/strings.xml b/packages/DefaultContainerService/res/values-ko/strings.xml index 0179e8596dc2..03049728fbc2 100644 --- a/packages/DefaultContainerService/res/values-ko/strings.xml +++ b/packages/DefaultContainerService/res/values-ko/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Media Container Service"</string> + <string name="service_name" msgid="4841491635055379553">"패키지 액세스 도움말"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-nb/strings.xml b/packages/DefaultContainerService/res/values-nb/strings.xml index 0179e8596dc2..637f54d707c5 100644 --- a/packages/DefaultContainerService/res/values-nb/strings.xml +++ b/packages/DefaultContainerService/res/values-nb/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Media Container Service"</string> + <string name="service_name" msgid="4841491635055379553">"Hjelpeprogram for pakketilgang"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-nl/strings.xml b/packages/DefaultContainerService/res/values-nl/strings.xml index 0179e8596dc2..9ece04057740 100644 --- a/packages/DefaultContainerService/res/values-nl/strings.xml +++ b/packages/DefaultContainerService/res/values-nl/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Media Container Service"</string> + <string name="service_name" msgid="4841491635055379553">"Helper voor pakkettoegang"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-pl/strings.xml b/packages/DefaultContainerService/res/values-pl/strings.xml index 0c96f3d4eacc..216d715996c7 100644 --- a/packages/DefaultContainerService/res/values-pl/strings.xml +++ b/packages/DefaultContainerService/res/values-pl/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Usługa kontenera multimediów"</string> + <string name="service_name" msgid="4841491635055379553">"Package Access Helper"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-pt-rPT/strings.xml b/packages/DefaultContainerService/res/values-pt-rPT/strings.xml index 0179e8596dc2..5c03669c9775 100644 --- a/packages/DefaultContainerService/res/values-pt-rPT/strings.xml +++ b/packages/DefaultContainerService/res/values-pt-rPT/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Media Container Service"</string> + <string name="service_name" msgid="4841491635055379553">"Ajuda p/ aceder pacotes"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-pt/strings.xml b/packages/DefaultContainerService/res/values-pt/strings.xml index 00b90de6bdc7..5fbd949339a7 100644 --- a/packages/DefaultContainerService/res/values-pt/strings.xml +++ b/packages/DefaultContainerService/res/values-pt/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Serviço de recipiente de mídia"</string> + <string name="service_name" msgid="4841491635055379553">"Assistente de pacote"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-ru/strings.xml b/packages/DefaultContainerService/res/values-ru/strings.xml index 0179e8596dc2..ccb0c5388101 100644 --- a/packages/DefaultContainerService/res/values-ru/strings.xml +++ b/packages/DefaultContainerService/res/values-ru/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Media Container Service"</string> + <string name="service_name" msgid="4841491635055379553">"Мастер доступа к пакетам"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-sv/strings.xml b/packages/DefaultContainerService/res/values-sv/strings.xml index b0978141afa0..097a709612a1 100644 --- a/packages/DefaultContainerService/res/values-sv/strings.xml +++ b/packages/DefaultContainerService/res/values-sv/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Medietjänst"</string> + <string name="service_name" msgid="4841491635055379553">"Hjälp med paketåtkomst"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-tr/strings.xml b/packages/DefaultContainerService/res/values-tr/strings.xml index afd870faa4da..12ea67455640 100644 --- a/packages/DefaultContainerService/res/values-tr/strings.xml +++ b/packages/DefaultContainerService/res/values-tr/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"Ortam Kapsayıcı Hizmeti"</string> + <string name="service_name" msgid="4841491635055379553">"Paket Erişim Yardımcısı"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-zh-rCN/strings.xml b/packages/DefaultContainerService/res/values-zh-rCN/strings.xml index 4f99d1b58a39..65928b10d0e2 100644 --- a/packages/DefaultContainerService/res/values-zh-rCN/strings.xml +++ b/packages/DefaultContainerService/res/values-zh-rCN/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"媒体容器服务"</string> + <string name="service_name" msgid="4841491635055379553">"软件包访问帮助程序"</string> </resources> diff --git a/packages/DefaultContainerService/res/values-zh-rTW/strings.xml b/packages/DefaultContainerService/res/values-zh-rTW/strings.xml index 38870f65a6e2..9a43509436fb 100644 --- a/packages/DefaultContainerService/res/values-zh-rTW/strings.xml +++ b/packages/DefaultContainerService/res/values-zh-rTW/strings.xml @@ -20,5 +20,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="service_name" msgid="2260781993795858516">"媒體庫服務"</string> + <string name="service_name" msgid="4841491635055379553">"套件存取輔助程式"</string> </resources> diff --git a/packages/DefaultContainerService/res/values/strings.xml b/packages/DefaultContainerService/res/values/strings.xml index 2897f34d5845..37f5b61fd59a 100644 --- a/packages/DefaultContainerService/res/values/strings.xml +++ b/packages/DefaultContainerService/res/values/strings.xml @@ -19,5 +19,5 @@ --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- service name --> - <string name="service_name">Media Container Service</string> + <string name="service_name">Package Access Helper</string> </resources> diff --git a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java index 6eaf0ccf6410..f08bd3c1bb74 100644 --- a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java +++ b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java @@ -17,13 +17,17 @@ package com.android.defcontainer; import com.android.internal.app.IMediaContainerService; +import com.android.internal.content.NativeLibraryHelper; import com.android.internal.content.PackageHelper; + import android.content.Intent; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.PackageInfoLite; import android.content.pm.PackageManager; import android.content.pm.PackageParser; +import android.content.res.ObbInfo; +import android.content.res.ObbScanner; import android.net.Uri; import android.os.Environment; import android.os.IBinder; @@ -35,6 +39,7 @@ import android.os.StatFs; import android.app.IntentService; import android.util.DisplayMetrics; import android.util.Log; +import android.util.Pair; import java.io.File; import java.io.FileInputStream; @@ -42,6 +47,11 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.util.LinkedList; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipException; +import java.util.zip.ZipFile; import android.os.FileUtils; import android.provider.Settings; @@ -57,6 +67,8 @@ public class DefaultContainerService extends IntentService { private static final String TAG = "DefContainer"; private static final boolean localLOGV = true; + private static final String LIB_DIR_NAME = "lib"; + private IMediaContainerService.Stub mBinder = new IMediaContainerService.Stub() { /* * Creates a new container and copies resource there. @@ -125,8 +137,6 @@ public class DefaultContainerService extends IntentService { metrics.setToDefaults(); PackageParser.PackageLite pkg = packageParser.parsePackageLite( archiveFilePath, 0); - ret.packageName = pkg.packageName; - ret.installLocation = pkg.installLocation; // Nuke the parser reference right away and force a gc packageParser = null; Runtime.getRuntime().gc(); @@ -136,6 +146,7 @@ public class DefaultContainerService extends IntentService { return ret; } ret.packageName = pkg.packageName; + ret.installLocation = pkg.installLocation; ret.recommendedInstallLocation = recommendAppInstallLocation(pkg.installLocation, archiveFilePath, flags); return ret; } @@ -143,6 +154,10 @@ public class DefaultContainerService extends IntentService { public boolean checkFreeStorage(boolean external, Uri fileUri) { return checkFreeStorageInner(external, fileUri); } + + public ObbInfo getObbInfo(String filename) { + return ObbScanner.getObbInfo(filename); + } }; public DefaultContainerService() { @@ -189,18 +204,51 @@ public class DefaultContainerService extends IntentService { Log.w(TAG, "Make sure sdcard is mounted."); return null; } - // Create new container at newCachePath + + // The .apk file String codePath = packageURI.getPath(); File codeFile = new File(codePath); - String newCachePath = null; + + // Calculate size of container needed to hold base APK. + long sizeBytes = codeFile.length(); + + // Check all the native files that need to be copied and add that to the container size. + ZipFile zipFile; + List<Pair<ZipEntry, String>> nativeFiles; + try { + zipFile = new ZipFile(codeFile); + + nativeFiles = new LinkedList<Pair<ZipEntry, String>>(); + + NativeLibraryHelper.listPackageNativeBinariesLI(zipFile, nativeFiles); + + final int N = nativeFiles.size(); + for (int i = 0; i < N; i++) { + final Pair<ZipEntry, String> entry = nativeFiles.get(i); + + /* + * Note that PackageHelper.createSdDir adds a 1MB padding on + * our claimed size, so we don't have to worry about block + * alignment here. + */ + sizeBytes += entry.first.getSize(); + } + } catch (ZipException e) { + Log.w(TAG, "Failed to extract data from package file", e); + return null; + } catch (IOException e) { + Log.w(TAG, "Failed to cache package shared libs", e); + return null; + } + // Create new container - if ((newCachePath = PackageHelper.createSdDir(codeFile, - newCid, key, Process.myUid())) == null) { + String newCachePath = null; + if ((newCachePath = PackageHelper.createSdDir(sizeBytes, newCid, key, Process.myUid())) == null) { Log.e(TAG, "Failed to create container " + newCid); return null; } - if (localLOGV) Log.i(TAG, "Created container for " + newCid - + " at path : " + newCachePath); + if (localLOGV) + Log.i(TAG, "Created container for " + newCid + " at path : " + newCachePath); File resFile = new File(newCachePath, resFileName); if (!FileUtils.copyFile(new File(codePath), resFile)) { Log.e(TAG, "Failed to copy " + codePath + " to " + resFile); @@ -208,6 +256,32 @@ public class DefaultContainerService extends IntentService { PackageHelper.destroySdDir(newCid); return null; } + + try { + File sharedLibraryDir = new File(newCachePath, LIB_DIR_NAME); + sharedLibraryDir.mkdir(); + + final int N = nativeFiles.size(); + for (int i = 0; i < N; i++) { + final Pair<ZipEntry, String> entry = nativeFiles.get(i); + + InputStream is = zipFile.getInputStream(entry.first); + try { + File destFile = new File(sharedLibraryDir, entry.second); + if (!FileUtils.copyToFile(is, destFile)) { + throw new IOException("Couldn't copy native binary " + + entry.first.getName() + " to " + entry.second); + } + } finally { + is.close(); + } + } + } catch (IOException e) { + Log.e(TAG, "Couldn't copy native file to container", e); + PackageHelper.destroySdDir(newCid); + return null; + } + if (localLOGV) Log.i(TAG, "Copied " + codePath + " to " + resFile); if (!PackageHelper.finalizeSdDir(newCid)) { Log.e(TAG, "Failed to finalize " + newCid + " at path " + newCachePath); |
