Chromium Code Reviews| Index: mojo/runner/android/apk/src/org/chromium/mojo/shell/ShellMain.java |
| diff --git a/mojo/runner/android/apk/src/org/chromium/mojo/shell/ShellMain.java b/mojo/runner/android/apk/src/org/chromium/mojo/shell/ShellMain.java |
| index 7b9d67d0036fb58cb4c303aa24cc934884baba34..82aff60be665a20f6b25d7556ff84fa1ccdc9ee2 100644 |
| --- a/mojo/runner/android/apk/src/org/chromium/mojo/shell/ShellMain.java |
| +++ b/mojo/runner/android/apk/src/org/chromium/mojo/shell/ShellMain.java |
| @@ -11,7 +11,11 @@ import android.util.Log; |
| import org.chromium.base.CalledByNative; |
| import org.chromium.base.JNINamespace; |
| +import java.io.BufferedReader; |
| import java.io.File; |
| +import java.io.IOException; |
| +import java.io.InputStreamReader; |
| +import java.nio.charset.Charset; |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.List; |
| @@ -25,25 +29,50 @@ public class ShellMain { |
| // Directory where applications bundled with the shell will be extracted. |
| private static final String LOCAL_APP_DIRECTORY = "local_apps"; |
| - // Individual applications bundled with the shell as assets. |
| - private static final String NETWORK_LIBRARY_APP = "network_service.mojo"; |
| // The mojo_shell library is also an executable run in forked processes when running |
| // multi-process. |
| private static final String MOJO_SHELL_EXECUTABLE = "libmojo_runner.so"; |
| + // Name of the file containing the assets to extract. File format is a file per line. |
| + private static final String ASSETS_LIST_NAME = "assets_list"; |
| + |
| /** |
| * A guard flag for calling nativeInit() only once. |
| **/ |
| private static boolean sInitialized = false; |
| /** |
| + * Returns the names of the assets in ASSETS_LIST_NAME. |
| + */ |
| + private static List<String> getAssetsList(Context context) throws IOException { |
| + List<String> results = new ArrayList<String>(); |
| + BufferedReader reader = new BufferedReader(new InputStreamReader( |
| + context.getAssets().open(ASSETS_LIST_NAME), Charset.forName("UTF-8"))); |
| + |
| + try { |
| + String line; |
| + while ((line = reader.readLine()) != null) { |
| + // These two are read by the system and don't need to be extracted. |
| + if (!line.equals("bootstrap_java.dex.jar") && !line.equals("libbootstrap.so")) { |
|
Jay Civelli
2015/05/11 21:07:34
Should we filter out blank lines just to be on the
sky
2015/05/11 21:13:35
Done.
|
| + results.add(line); |
| + } |
| + } |
| + } finally { |
| + reader.close(); |
| + } |
| + return results; |
| + } |
| + |
| + /** |
| * Initializes the native system. |
| **/ |
| static void ensureInitialized(Context applicationContext, String[] parameters) { |
| if (sInitialized) return; |
| + File localAppsDir = getLocalAppsDir(applicationContext); |
| try { |
| - FileHelper.extractFromAssets(applicationContext, NETWORK_LIBRARY_APP, |
| - getLocalAppsDir(applicationContext), false); |
| + for (String assetPath : getAssetsList(applicationContext)) { |
| + FileHelper.extractFromAssets(applicationContext, assetPath, localAppsDir, false); |
| + } |
| File mojoShell = new File(applicationContext.getApplicationInfo().nativeLibraryDir, |
| MOJO_SHELL_EXECUTABLE); |
| @@ -55,7 +84,7 @@ public class ShellMain { |
| nativeInit(applicationContext, mojoShell.getAbsolutePath(), |
| parametersList.toArray(new String[parametersList.size()]), |
| - getLocalAppsDir(applicationContext).getAbsolutePath(), |
| + localAppsDir.getAbsolutePath(), |
| getTmpDir(applicationContext).getAbsolutePath()); |
| sInitialized = true; |
| } catch (Exception e) { |