Project

General

Profile

DeprecatedBuildAndroid » History » Version 33

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