We have now a temporary git repository at gitorious:
- Root your phone
- Backup your current system!!!
- Install git
Setting up the build environment and getting source code¶
These instructions assume that you are building replicant in your home directory (~). If you are building it in another directory, modify path names accordingly.
Get the repo tool¶
repo is a front-end to git which is used to manage several git repositories.
mkdir bin cd bin wget http://android.git.kernel.org/repo chmod a+x repo cd ..
Check out the Replicant repository¶
This step will download the Android source (minus the kernel) and the Replicant patches.
mkdir replicant cd replicant ../bin/repo init -u git://gitorious.org/replicant/manifest.git -b replicant ../bin/repo sync
Optional: building the kernel and wireless LAN driver¶
By default, the Android build system uses a pre-compiled kernel and wireless driver rather than compiling these components from scratch. If you want to compile your own copy of either of these components, you have to compile both: the wireless driver sources included with Android are incompatible with the pre-compiled kernel.
Get the kernel source¶
To download the kernel sources, create a file in your replicant/.repo directory called "local_manifest.xml" containing the following:
<?xml version="1.0" encoding="UTF-8"?> <manifest> <project path="kernel" name="kernel/msm" revision="refs/heads/android-msm-2.6.27"/> </manifest>
Then from the ~/replicant/ directory, run:
This will create a directory called replicant/kernel and download the kernel sources to it.
Build the kernel¶
To build the kernel:
cd ~/replicant/kernel export ARCH=arm export CROSS_COMPILE=arm-eabi- export PATH=$PATH:~/replicant/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin cp arch/arm/configs/msm_defconfig .config make oldconfig && make
Wait several hours.
Point the build system to your kernel¶
Create a file called
~/replicant/buildspec.mk containing the following:
This will instruct the build process to use your kernel rather than the pre-compiled kernel.
Build the wifi module¶
To build the wifi module:
cd ~/replicant/system/wlan/ti/sta_dk_4_0_4_32 export KERNEL_DIR=~/replicant/kernel/ make
(If make can't find your compiler, re-run same PATH export command you ran before compiling the kernel.)
Replace the pre-built wifi module with the one you just built:
cp wlan.ko ~/replicant/vendor/htc/dream-open
Build the firmware¶
Change the build scripts to include some important missing packages¶
(This section will be removed once these changes are committed to the replicant repository)
<pre> PRODUCT_PACKAGES := \ Calculator \ Email \ [[ImProvider]] \ [[SdkSetup]] \ [[VoiceDialer]] </pre> This will include packages in the build which would otherwise be missing (including the [[SdkSetup]] package, which will enable incoming calls). <pre> cd ~/replicant make </pre> Wait and wait and wait. h2. Flashing the new firmware [to be written] h2. Building individual pieces h3. Each time you want to build something * open a new console * Then type: <pre> cd ~/replicant source build/envsetup.sh export ANDROID_JAVA_HOME=$JAVA_HOME lunch htc_dream-eng make </pre> * The files to flash are in ~/replicant/out/target/product/dream,flash them and then clear the cache * boot and push the wifi firmware if you want it h3. If you want to build a particular project * open a new console * build everything if it was not done before * Then type: <pre> cd ~/replicant source build/envsetup.sh export ANDROID_JAVA_HOME=$JAVA_HOME lunch htc_dream-eng #go into the directory containing an Android.mk mm </pre> h2. error workarrounds == hyts_Foo.c === if you have: <pre> target Java: [[SettingsProvider]] (out/target/common/obj/APPS/SettingsProvider_intermediates/classes) target Java: Settings (out/target/common/obj/APPS/Settings_intermediates/classes) java.util.zip.ZipException: duplicate entry: hyts_Foo.c at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:192) at java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:109) at sun.tools.jar.Main.addFile(Main.java:731) at sun.tools.jar.Main.update(Main.java:585) at sun.tools.jar.Main.run(Main.java:220) at sun.tools.jar.Main.main(Main.java:1167) make: *** [out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar] Error 1 make: *** Deleting file @out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar' make: *** Waiting for unfinished jobs.... Note: frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. </pre> do that: <pre> rm -f dalvik/libcore/luni/src/test/resources/hyts_Foo.c </pre> And it will continue to build Note that that: <pre> rm -rf dalvik/libcore/dom/src/test/resources/* rm -rf dalvik/libcore/xml/src/test/resources/* </pre> didn't work The workarrounds came from "here":http://groups.google.com/group/android-porting/browse_thread/thread/c51d436b2b1edc8d/b320ee78b2ddd0e4 and "here":http://lazyhack.net/tag/emulator/ h3. No rule to make target @development/data/etc/apns-conf_sdk.xml' if you have: <pre> make: *** No rule to make target @development/data/etc/apns-conf_sdk.xml', needed by @out/target/product/dream-open/system/etc/apns-conf.xml'. Stop. make: *** Waiting for unfinished jobs.... </pre> simply re-type make and it should continue