DeprecatedBuildAndroid » History » Version 34
Denis 'GNUtoo' Carikli, 11/11/2010 09:49 AM
| 1 | 16 | Denis 'GNUtoo' Carikli | Edit: |
|---|---|---|---|
| 2 | We have now a temporary git repository at gitorious: |
||
| 3 | http://gitorious.org/replicant |
||
| 4 | |||
| 5 | 1 | Denis 'GNUtoo' Carikli | |
| 6 | 34 | Denis 'GNUtoo' Carikli | h2. Before starting |
| 7 | 1 | Denis 'GNUtoo' Carikli | |
| 8 | 34 | Denis 'GNUtoo' Carikli | * Root your phone |
| 9 | * Backup your current system!!! |
||
| 10 | * Install git |
||
| 11 | |||
| 12 | |||
| 13 | h2. Setting up the build environment and getting source code |
||
| 14 | |||
| 15 | |||
| 16 | 25 | Aaron Williamson - | These instructions assume that you are building replicant in your home directory (~). If you are building it in another directory, modify path names accordingly. |
| 17 | |||
| 18 | 34 | Denis 'GNUtoo' Carikli | |
| 19 | h3. Get the repo tool |
||
| 20 | |||
| 21 | 1 | Denis 'GNUtoo' Carikli | repo is a front-end to git which is used to manage several git repositories. |
| 22 | 34 | Denis 'GNUtoo' Carikli | <pre> |
| 23 | 1 | Denis 'GNUtoo' Carikli | mkdir bin |
| 24 | cd bin |
||
| 25 | wget http://android.git.kernel.org/repo |
||
| 26 | chmod a+x repo |
||
| 27 | 25 | Aaron Williamson - | cd .. |
| 28 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 29 | 25 | Aaron Williamson - | |
| 30 | 34 | Denis 'GNUtoo' Carikli | |
| 31 | h3. Check out the Replicant repository |
||
| 32 | |||
| 33 | 1 | Denis 'GNUtoo' Carikli | This step will download the Android source (minus the kernel) and the Replicant patches. |
| 34 | 34 | Denis 'GNUtoo' Carikli | <pre> |
| 35 | 1 | Denis 'GNUtoo' Carikli | mkdir replicant |
| 36 | cd replicant |
||
| 37 | ../bin/repo init -u git://gitorious.org/replicant/manifest.git -b replicant |
||
| 38 | ../bin/repo sync |
||
| 39 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 40 | 25 | Aaron Williamson - | |
| 41 | |||
| 42 | 34 | Denis 'GNUtoo' Carikli | h2. Optional: building the kernel and wireless LAN driver |
| 43 | |||
| 44 | |||
| 45 | 1 | Denis 'GNUtoo' Carikli | 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. |
| 46 | 25 | Aaron Williamson - | |
| 47 | |||
| 48 | 34 | Denis 'GNUtoo' Carikli | h3. Get the kernel source |
| 49 | |||
| 50 | |||
| 51 | 1 | Denis 'GNUtoo' Carikli | To download the kernel sources, create a file in your replicant/.repo directory called "local_manifest.xml" containing the following: |
| 52 | 34 | Denis 'GNUtoo' Carikli | <pre> |
| 53 | 1 | Denis 'GNUtoo' Carikli | <?xml version="1.0" encoding="UTF-8"?> |
| 54 | 25 | Aaron Williamson - | <manifest> |
| 55 | <project path="kernel" name="kernel/msm" revision="refs/heads/android-msm-2.6.27"/> |
||
| 56 | </manifest> |
||
| 57 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 58 | 25 | Aaron Williamson - | |
| 59 | 1 | Denis 'GNUtoo' Carikli | Then from the ~/replicant/ directory, run: |
| 60 | 34 | Denis 'GNUtoo' Carikli | <pre> |
| 61 | 1 | Denis 'GNUtoo' Carikli | ../bin/repo sync |
| 62 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 63 | 1 | Denis 'GNUtoo' Carikli | |
| 64 | This will create a directory called replicant/kernel and download the kernel sources to it. |
||
| 65 | |||
| 66 | 25 | Aaron Williamson - | |
| 67 | 34 | Denis 'GNUtoo' Carikli | h3. Build the kernel |
| 68 | |||
| 69 | |||
| 70 | 25 | Aaron Williamson - | To build the kernel: |
| 71 | 1 | Denis 'GNUtoo' Carikli | |
| 72 | 34 | Denis 'GNUtoo' Carikli | <pre> |
| 73 | 1 | Denis 'GNUtoo' Carikli | cd ~/replicant/kernel |
| 74 | export ARCH=arm |
||
| 75 | 25 | Aaron Williamson - | export CROSS_COMPILE=arm-eabi- |
| 76 | export PATH=$PATH:~/replicant/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin |
||
| 77 | 1 | Denis 'GNUtoo' Carikli | cp arch/arm/configs/msm_defconfig .config |
| 78 | 25 | Aaron Williamson - | make oldconfig && make |
| 79 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 80 | 25 | Aaron Williamson - | |
| 81 | 1 | Denis 'GNUtoo' Carikli | Wait several hours. |
| 82 | |||
| 83 | |||
| 84 | 34 | Denis 'GNUtoo' Carikli | h3. Point the build system to your kernel |
| 85 | |||
| 86 | |||
| 87 | Create a file called @~/replicant/buildspec.mk@ containing the following: |
||
| 88 | <pre> |
||
| 89 | 1 | Denis 'GNUtoo' Carikli | TARGET_PRODUCT:=htc_dream |
| 90 | TARGET_PREBUILT_KERNEL:=kernel/arch/arm/boot/zImage |
||
| 91 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 92 | 1 | Denis 'GNUtoo' Carikli | |
| 93 | This will instruct the build process to use your kernel rather than the pre-compiled kernel. |
||
| 94 | |||
| 95 | |||
| 96 | 34 | Denis 'GNUtoo' Carikli | h3. Build the wifi module |
| 97 | |||
| 98 | |||
| 99 | 25 | Aaron Williamson - | To build the wifi module: |
| 100 | 34 | Denis 'GNUtoo' Carikli | <pre> |
| 101 | 1 | Denis 'GNUtoo' Carikli | cd ~/replicant/system/wlan/ti/sta_dk_4_0_4_32 |
| 102 | export KERNEL_DIR=~/replicant/kernel/ |
||
| 103 | make |
||
| 104 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 105 | 1 | Denis 'GNUtoo' Carikli | |
| 106 | (If make can't find your compiler, re-run same PATH export command you ran before compiling the kernel.) |
||
| 107 | |||
| 108 | Replace the pre-built wifi module with the one you just built: |
||
| 109 | 34 | Denis 'GNUtoo' Carikli | <pre> |
| 110 | 1 | Denis 'GNUtoo' Carikli | cp wlan.ko ~/replicant/vendor/htc/dream-open |
| 111 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 112 | 25 | Aaron Williamson - | |
| 113 | 1 | Denis 'GNUtoo' Carikli | |
| 114 | 34 | Denis 'GNUtoo' Carikli | h2. Build the firmware |
| 115 | 1 | Denis 'GNUtoo' Carikli | |
| 116 | |||
| 117 | 34 | Denis 'GNUtoo' Carikli | |
| 118 | h3. Change the build scripts to include some important missing packages |
||
| 119 | |||
| 120 | |||
| 121 | _(This section will be removed once these changes are committed to the replicant repository)_ |
||
| 122 | |||
| 123 | <pre> |
||
| 124 | <pre> |
||
| 125 | 1 | Denis 'GNUtoo' Carikli | PRODUCT_PACKAGES := \ |
| 126 | Calculator \ |
||
| 127 | Email \ |
||
| 128 | 34 | Denis 'GNUtoo' Carikli | [[ImProvider]] \ |
| 129 | [[SdkSetup]] \ |
||
| 130 | [[VoiceDialer]] |
||
| 131 | </pre> |
||
| 132 | 26 | Aaron Williamson - | |
| 133 | 34 | Denis 'GNUtoo' Carikli | This will include packages in the build which would otherwise be missing (including the [[SdkSetup]] package, which will enable incoming calls). |
| 134 | 26 | Aaron Williamson - | |
| 135 | 34 | Denis 'GNUtoo' Carikli | <pre> |
| 136 | 26 | Aaron Williamson - | cd ~/replicant |
| 137 | 1 | Denis 'GNUtoo' Carikli | make |
| 138 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 139 | 22 | Denis 'GNUtoo' Carikli | |
| 140 | Wait and wait and wait. |
||
| 141 | 5 | Denis 'GNUtoo' Carikli | |
| 142 | |||
| 143 | 34 | Denis 'GNUtoo' Carikli | h2. Flashing the new firmware |
| 144 | |||
| 145 | |||
| 146 | 5 | Denis 'GNUtoo' Carikli | [to be written] |
| 147 | 1 | Denis 'GNUtoo' Carikli | |
| 148 | |||
| 149 | 34 | Denis 'GNUtoo' Carikli | h2. Building individual pieces |
| 150 | |||
| 151 | |||
| 152 | |||
| 153 | h3. Each time you want to build something |
||
| 154 | |||
| 155 | * open a new console |
||
| 156 | * Then type: |
||
| 157 | <pre> |
||
| 158 | 1 | Denis 'GNUtoo' Carikli | cd ~/replicant |
| 159 | source build/envsetup.sh |
||
| 160 | export ANDROID_JAVA_HOME=$JAVA_HOME |
||
| 161 | lunch htc_dream-eng |
||
| 162 | make |
||
| 163 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 164 | * The files to flash are in ~/replicant/out/target/product/dream,flash them and then clear the cache |
||
| 165 | * boot and push the wifi firmware if you want it |
||
| 166 | 24 | Denis 'GNUtoo' Carikli | |
| 167 | |||
| 168 | 34 | Denis 'GNUtoo' Carikli | |
| 169 | h3. If you want to build a particular project |
||
| 170 | |||
| 171 | * open a new console |
||
| 172 | * build everything if it was not done before |
||
| 173 | * Then type: |
||
| 174 | <pre> |
||
| 175 | 30 | Denis 'GNUtoo' Carikli | cd ~/replicant |
| 176 | source build/envsetup.sh |
||
| 177 | export ANDROID_JAVA_HOME=$JAVA_HOME |
||
| 178 | lunch htc_dream-eng |
||
| 179 | #go into the directory containing an Android.mk |
||
| 180 | mm |
||
| 181 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 182 | 30 | Denis 'GNUtoo' Carikli | |
| 183 | 34 | Denis 'GNUtoo' Carikli | |
| 184 | h2. error workarrounds == |
||
| 185 | hyts_Foo.c === |
||
| 186 | 30 | Denis 'GNUtoo' Carikli | if you have: |
| 187 | 34 | Denis 'GNUtoo' Carikli | <pre> |
| 188 | target Java: [[SettingsProvider]] (out/target/common/obj/APPS/SettingsProvider_intermediates/classes) |
||
| 189 | 30 | Denis 'GNUtoo' Carikli | target Java: Settings (out/target/common/obj/APPS/Settings_intermediates/classes) |
| 190 | java.util.zip.ZipException: duplicate entry: hyts_Foo.c |
||
| 191 | at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:192) |
||
| 192 | at java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:109) |
||
| 193 | at sun.tools.jar.Main.addFile(Main.java:731) |
||
| 194 | at sun.tools.jar.Main.update(Main.java:585) |
||
| 195 | at sun.tools.jar.Main.run(Main.java:220) |
||
| 196 | at sun.tools.jar.Main.main(Main.java:1167) |
||
| 197 | make: *** [out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar] Error 1 |
||
| 198 | 34 | Denis 'GNUtoo' Carikli | make: *** Deleting file @out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar' |
| 199 | 30 | Denis 'GNUtoo' Carikli | make: *** Waiting for unfinished jobs.... |
| 200 | Note: frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java uses or overrides a deprecated API. |
||
| 201 | Note: Recompile with -Xlint:deprecation for details. |
||
| 202 | Note: Some input files use or override a deprecated API. |
||
| 203 | Note: Recompile with -Xlint:deprecation for details. |
||
| 204 | Note: Some input files use or override a deprecated API. |
||
| 205 | 31 | Denis 'GNUtoo' Carikli | Note: Recompile with -Xlint:deprecation for details. |
| 206 | 30 | Denis 'GNUtoo' Carikli | Note: Some input files use unchecked or unsafe operations. |
| 207 | Note: Recompile with -Xlint:unchecked for details. |
||
| 208 | 31 | Denis 'GNUtoo' Carikli | Note: Some input files use or override a deprecated API. |
| 209 | 1 | Denis 'GNUtoo' Carikli | Note: Recompile with -Xlint:deprecation for details. |
| 210 | Note: Some input files use unchecked or unsafe operations. |
||
| 211 | 32 | Denis 'GNUtoo' Carikli | Note: Recompile with -Xlint:unchecked for details. |
| 212 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 213 | 31 | Denis 'GNUtoo' Carikli | |
| 214 | 1 | Denis 'GNUtoo' Carikli | do that: |
| 215 | 34 | Denis 'GNUtoo' Carikli | <pre> |
| 216 | 32 | Denis 'GNUtoo' Carikli | rm -f dalvik/libcore/luni/src/test/resources/hyts_Foo.c |
| 217 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 218 | 32 | Denis 'GNUtoo' Carikli | And it will continue to build |
| 219 | |||
| 220 | 33 | Denis 'GNUtoo' Carikli | Note that that: |
| 221 | 34 | Denis 'GNUtoo' Carikli | <pre> |
| 222 | 33 | Denis 'GNUtoo' Carikli | rm -rf dalvik/libcore/dom/src/test/resources/* |
| 223 | rm -rf dalvik/libcore/xml/src/test/resources/* |
||
| 224 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 225 | 33 | Denis 'GNUtoo' Carikli | didn't work |
| 226 | |||
| 227 | 34 | Denis 'GNUtoo' Carikli | The workarrounds came from "here":http://groups.google.com/group/android-porting/browse_thread/thread/c51d436b2b1edc8d/b320ee78b2ddd0e4 and "here":http://lazyhack.net/tag/emulator/ |
| 228 | |||
| 229 | h3. No rule to make target @development/data/etc/apns-conf_sdk.xml' |
||
| 230 | |||
| 231 | 1 | Denis 'GNUtoo' Carikli | if you have: |
| 232 | 34 | Denis 'GNUtoo' Carikli | <pre> |
| 233 | 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. |
||
| 234 | 1 | Denis 'GNUtoo' Carikli | make: *** Waiting for unfinished jobs.... |
| 235 | 34 | Denis 'GNUtoo' Carikli | </pre> |
| 236 | 1 | Denis 'GNUtoo' Carikli | simply re-type make and it should continue |