Building Fennec with Eclipse — instructions
Here are terse instructions for getting my work in progress for building Fennec with Eclipse running on your local developer machine. This is a companion to my screencast about building Fennec with Eclipse.
Start with a fresh checkout of some repository that merges into mozilla-central (mozilla-central, mozilla-inbound, fx-team, …)
$ hg clone http://hg.mozilla.org/mozilla-central/ ...
This repo doesn’t really need to be fresh, but you shouldn’t have any uncommitted changes in your working directory.
Now, we’ll pull in my development changes. I’ve pushed these out to Greg Szorc’s gecko-collab repository, which is a modern Mercurial configuration for doing Gecko development. I’m personally using some of the advanced features, namely changeset evolution, but you don’t need to use any of that to get and use my changes. (The warning below about obsolete feature not enabled is part of the feature mismatch, but you can safely ignore it.)
$ hg pull -u -r nalexander/bug-853045-mach-projectify http://hg.gregoryszorc.com/gecko-collab pulling from http://hg.gregoryszorc.com/gecko-collab obsolete feature not enabled but 136 markers found! searching for changes adding changesets adding manifests adding file changes added 12 changesets with 88 changes to 108 files (+1 heads) adding remote bookmark aurora/COMM193a4_20100510_RELBRANCH ... 205 files updated, 0 files merged, 63 files removed, 0 files unresolved
If we check the log, we’ll see something like the following. (This will change as patches get updated and merged into mainline.)
$ hg log -l 13 -f obsolete feature not enabled but 136 markers found! changeset: 154029:7d7660bea4a9 bookmark: nalexander/bug-853045-mach-projectify tag: tip user: Nick Alexander date: Fri Nov 01 08:37:02 2013 -0700 summary: Bug 853045 - Implement |mach projectify-{create,update}|. r=nalexander,bnicholson,gps changeset: 154028:6b66afd5896f user: Nick Alexander date: Wed Nov 06 21:47:59 2013 -0500 summary: Bug 934646 - Declare Android resource directories relative to $SRCDIR. r=glandium changeset: 154027:77edf07ea0ad user: Nick Alexander date: Thu Nov 07 15:01:54 2013 -0500 summary: Bug 934646 - Replace hard-coded Android resource ID. r=mfinkle changeset: 154026:8ef4bd5cc691 user: Nick Alexander date: Wed Nov 06 17:52:52 2013 -0500 summary: Bug 934646 - Delete unused resources. r=mfinkle changeset: 154025:5eeb79bb1eef user: Nick Alexander date: Wed Nov 06 17:52:52 2013 -0500 summary: Bug 934646 - Always include Crash Reporter resources in Android APK. r=mfinkle changeset: 154024:e5e64d42fc42 user: Nick Alexander date: Wed Nov 06 17:10:26 2013 -0500 summary: Bug 567884 - Part 2: Use INSTALL_TARGETS to install icons. r=glandium changeset: 154023:b2455b8d9b93 user: Nick Alexander date: Wed Nov 06 16:52:49 2013 -0500 summary: Bug 567884 - Part 1: Rename branding resources. r=glandium changeset: 154022:1543ac7c37cc user: Nick Alexander date: Wed Nov 06 16:22:11 2013 -0500 summary: Bug 933300 - Review comments. r=glandium changeset: 154021:733edde0bf13 user: Nick Alexander date: Thu Oct 31 09:32:02 2013 -0700 summary: Bug 933300 - Part 2: Generate generated/org/mozilla/gecko/R.java. r=glandium changeset: 154020:e453968d23a9 user: Nick Alexander date: Wed Oct 30 23:08:09 2013 -0700 summary: Bug 933300 - Part 1: Generate preprocessed code into generated/org/mozilla/*. r=glandium changeset: 154019:6fae0e6e230f user: Nick Alexander date: Wed Nov 06 11:42:03 2013 -0500 summary: Bug 934864 - Add REPORT_BUILD do INSTALL_TARGETS and PP_TARGETS changeset: 154018:7caf5356dd7e parent: 153961:7433abfef863 user: Mike Hommey date: Tue Nov 05 23:10:13 2013 +0900 summary: Bug 934864 - Add option to make INSTALL_TARGETS and PP_TARGETS keep the original path when copying/preprocessing changeset: 153961:7433abfef863 parent: 153927:f73dd492c34c parent: 153960:844f6bf9bc17 user: Carsten "Tomcat" Book date: Thu Nov 07 15:50:39 2013 +0100 summary: merge b2g-inbound to mozilla-central
Now we need to configure our build directory. If you’ve already created a mozconfig file for Fennec, great; if not, here’s mine. At a minimum, you’ll need to update the paths to the Android SDK and NDK.
$ echo mozconfig # Build Fennec ac_add_options --enable-application=mobile/android # Android ac_add_options --target=arm-linux-androideabi ac_add_options --with-android-ndk="$HOME/Mozilla/Android/android-ndk-r8e" ac_add_options --with-android-sdk="$HOME/Mozilla/Android/android-sdks/platforms/android-16" # Treat warnings as errors in directories with FAIL_ON_WARNINGS. ac_add_options --enable-warnings-as-errors ac_add_options --disable-optimize ac_add_options --disable-crashreporter ac_add_options --disable-debug-symbols mk_add_options MOZ_OBJDIR=./objdir-droid mk_add_options AUTOCLOBBER=1 mk_add_options MOZ_MAKE_FLAGS=-j7 ac_add_options --disable-elf-hack
If you look at the log above, you can see that my changes are based on top of the mozilla-central hg commit 7433abfef863. Navigating to https://tbpl.mozilla.org/?rev=7433abfef863 and clicking on the green B beside Android 2.2 Opt pops up a frame at the bottom of the page. Click go to build directory (in the bottom left corner of the page) and download the file fennec-28.0a1.en-US.android-arm.apk. Finally, unzip that file to, say, ../tmp. You should get a directory that looks like:
$ ls ../tmp AndroidManifest.xml META-INF application.ini assets classes.dex lib package-name.txt platform.ini recommended-addons.json removed-files res resources.arsc
Now we’re ready to create the Eclipse projects:
$ ./mach projectify-create -i eclipse -w ~/Documents/test --bindir ../tmp mobile/android/base 0:02.66 Using /Users/ncalexan/Mozilla/moz for source dir and /Users/ncalexan/Mozilla/moz/objdir-droid for object dir. 0:02.66 Using mobile/android/base for relative source dir. 0:02.66 Using /Users/ncalexan/Mozilla/moz for source dir and /Users/ncalexan/Mozilla/moz/objdir-droid for object dir. 0:02.66 Using mobile/android/base for relative source dir. 0:03.21 /usr/bin/make -C /Users/ncalexan/Mozilla/moz/objdir-droid/mobile/android/base -j8 -s -w generated/org/mozilla/fennec_ncalexan/App.java generated/org/mozilla/fennec_ncalexan/WebApp.java generated/org/mozilla/fennec_ncalexan/WebApps.java generated/org/mozilla/gecko/AppConstants.java generated/org/mozilla/gecko/R.java generated/org/mozilla/gecko/SysInfo.java generated/org/mozilla/gecko/background/announcements/AnnouncementsConstants.java generated/org/mozilla/gecko/background/common/GlobalConstants.java generated/org/mozilla/gecko/background/healthreport/HealthReportConstants.java generated/org/mozilla/gecko/mozglue/GeckoLoader.java generated/org/mozilla/gecko/sync/SyncConstants.java generated/org/mozilla/gecko/widget/GeckoEditText.java generated/org/mozilla/gecko/widget/GeckoImageButton.java generated/org/mozilla/gecko/widget/GeckoImageView.java generated/org/mozilla/gecko/widget/GeckoLinearLayout.java generated/org/mozilla/gecko/widget/GeckoRelativeLayout.java generated/org/mozilla/gecko/widget/GeckoTextSwitcher.java generated/org/mozilla/gecko/widget/GeckoTextView.java 0:03.86 find /Users/ncalexan/Mozilla/moz/mobile/android/projectify/eclipse -name *.launch 0:03.93 Preprocessing 11 files. 0:04.41 find /Users/ncalexan/Mozilla/moz/mobile/android/base -name *.java 0:04.70 Preprocessing 5 files. 0:04.72 Creating 9 symlinks.
Finally (!), you should be able to open up the newly created projects in Eclipse, following my screencast about building Fennec with Eclipse. Good luck!