Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Unified Diff: components/cronet/android/sample/README

Issue 864663004: Quick-start instructions for Cronet Sample Application (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more touch-ups to cronet sample app README Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/cronet/android/sample/README
diff --git a/components/cronet/android/sample/README b/components/cronet/android/sample/README
new file mode 100644
index 0000000000000000000000000000000000000000..97bee9d560c3e14b08af8aab33bd66a5d2b13754
--- /dev/null
+++ b/components/cronet/android/sample/README
@@ -0,0 +1,180 @@
+
+How to set up and run the sample app as an Android Studio project.
+
+Linux (Android Studio version 0.8.11 beta)
+=====
+(1) Launch Android Studio.
+
+(2) Choose "Import project".
+ - Navigate to the location of the sample soure code.
+ You should be looking at a directory named "sample"
+ containing a file named "AndroidManifest.xml".
+ - Pick a new destination for it.
+
+(3) Copy in the '.jar' files.
+ (a) Directly under the "app" directory of your project,
+ create a "libs" directory. Use a shell command if you like,
+ or use "File|New|Directory" from the menu. But note that
+ you only get "Directory" as an option if you are in
+ "Project" view, not "Android" view. "Project" models
+ the local machine's filesystem, but Android is a virtual
+ layout of files corresponding to the deployed hierarchy.
+ That is to say, do step (b) before step (a) if you're inclined.
+ (b) Toggle the view from "Android" to "Project"
+ in the selection list above the file hierarchy.
+ Otherwise you won't see "libs".
+ (c) Copy 'cronet.jar' and 'cronet_stub.jar' to "libs".
+
+ [Also note that it is possible to leave the '.jar' files
+ in their original locations, though this seems to be
+ somewhat discouraged by convention]
+
+(4) Inform the IDE about the '.jar' files.
+ (a) Select both files at once.
+ (b) Bring up the context menu and choose "Add as Library".
+ (d) Confirm "OK" at the "Add to module" dialog.
+ [Note: the keyboard shortcut and/or main menu selection
+ for these steps seems to be missing from Android Studio.
+ If you prefer, the advice under problem #2
+ in "Troubleshooting" below will perform the same thing
+ without reliance on menu selections]
+
+(5) Copy in the '.so' file.
+ (a) Under "app/src/main" create a directory named "jniLibs"
+ (b) Copy armeabi and ameabi-v7a into jniLibs, which should
+ contain only subdirectories, not directly a '.so' file
+ (c) The IDE will automatically know about these.
+
+(6) Click "Run".
+
+Troubleshooting:
+
+(I) If the project doesn't build, there are two typical problems:
+#1 - make sure that you have the correct 'cronet.jar'.
+There is one that is part of the Chromium build which
+does not include org.chromium.base (and so will be missing PathUtil,
+at least) and one that is part of the cronet build.
+
+#2 - If you have vast swaths of red text (errors) in the edit window
+for CronetSampleActivity, you should confirm that the requisite
+jar files are present in 'build.gradle'. There are at least 2
+files which are named 'build.gradle'. Check them both.
+You should observe the following lines [see footnote 1]
+
+dependencies {
+ compile file('libs/cronet.jar')
+ compile file('libs/cornet_stub.jar')
+}
+
+If absent, the lines may be added by hand to the gradle file
+which corresponds to the module named "app", and not the project
+s a whole. You might have to press a "Sync" button in the IDE
+which tells it to re-scan the 'build.gradle' files.
+
+(II) If the project builds but doesn't run, verify that the '.so' files
+are present in your Android package (which is just a jar file in disguise):
+% jar tf build/outputs/apk/app-debug.apk
+AndroidManifest.xml
+res/layout/cronet_sample_activity.xml
+resource.arsc
+classes.dex
+lib/armeabi/libcronet.so
+lib/armeabi-v7/libcronet.so
+META-INF
+etc
+
+If the '.so' files are not present, it is likely that Android Studio
+misinterpreted the containing folder as "ordinary" source code,
+which, due to lack of any special directive pertaining to it, failed
+to be copied to the apk. One thing to check for is the spelling
+of "jniLibs" - it must literally be that, with a capital "L" or
+it won't work. This is a bit of magic that allows users without
+the NDK (Native Development Kit) to deploy '.so' files.
+[With the NDK, things are different because in that case you have to
+produce the '.so' files, and create build rules to do so,
+so the setup is naturally more flexible to begin with.]
+As a visual cue that the folder has been recognized as special,
+its icon should match that of the "res" (resources) folder
+which resembles a tabbed manila folder with some extra cross-hatches
+on the front, and not the icon of the "java" folder.
+The marking on the icon signifies that its contents land on the
+the target device. But to keep things interesting, the icon is
+distinct visually only in "Android" view, not "Project" view.
+
+MacOS (Android Studio version 1.0.1)
+=====
+(0) You might or might not have to set a magic environment
+ variable as follows [see footnote 3]:
+ export STUDIO_JDK=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk
+
+(1) Launch Android Studio, which can be achieved from the command
+ line with
+ % open '/Applications/Android Studio.app'
+
+(2) Choose "Import Non-Android Studio Project"
+ (a) Navigate to the path containing "sample"
+ (b) Pick a place to put it, and choose "Finish"
+
+(3) If you are comfortable using shell commands to create directories,
+ you may proceed to step (3) for Linux above.
+ Otherwise, if you prefer to create directories from the UI,
+ proceed with the following steps.
+
+(4) Choose "File -> New -> Folder -> Assets Folder".
+ Check "Change Folder Location" and delete the entire
+ pathname that was there. Change it to 'libs'
+ which is conventional for pre-built jar files.
+
+(5) Copy and paste the two pre-built '.jar' files into 'assets'.
+ When you do this, it will say that the destination is
+ "app/libs". This is right. If you prefer to see
+ the file hierarchy as it really exists, you can change
+ the dropdown above the tree view from "android view"
+ to "project view". Or just keep in mind that assets = libs
+ at this level of the hierarchy.
+
+(6) Select both jar files that you added (Shift+click).
+ and pull up the menu for them (Ctrl+click).
+ Select "Add as library"
+
+(7) Choose "File -> New -> Folder -> JNI Folder".
+ Choose "Change Folder Location"
+ and change the name to "src/main/jniLibs" [see footnote 2]
+
+----
+
+Footnotes:
+[1] "compile file" as used in a dependency line means to package the
+ named jars into the apk, and not to make those files.
+ The opposite of this is "provided file" which assumes that the
+ jars exist on the device already (in whatever the standard
+ location is for systemwide jar files), and not that a file
+ has been externally provided to Android Studio.
+
+[2] The menu option to add JNI files assumes that you have the
+ NDK (Native Development Kit) installed and want to produce
+ files into the named directory. This is triggered by an
+ automatic rule that tries to look for C++ source code
+ and the NDK based on the existence of "src/main/jni".
+ Changing this directory to "src/main/jniLibs" is magical
+ in a different way: it informs Android Studio that you will
+ place precompiled binaries into that directory.
+
+[3] This has to do with differences between the JDK that the studio
+ runs in as distinct from the JDK that the studio understands
+ to be present on the target machine.
+ There is discussion of the issue in
+ https://code.google.com/p/android/issues/detail?id=82378
+
+Additional notes:
+
+Ideally the two .jar files and one .so file could be delivered as one .aar
+(Android Archive) file, but Android Studio will try to pull aar files from
+a Maven repository without some workarounds that are about as much trouble
+as adding in three separate files.
+See https://code.google.com/p/android/issues/detail?id=55863
+
+Additionally, it is unclear how to automate the creation of a '.aar' file
+outside of Android Studio and Gradle. If the entire workflow were controlled
+by Gradle, it would be one thing; but presently the cronet jars are
+produced as artifacts of the Chromium build which uses Ninja.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698