5af4af415bb2b2657847aec6d15c7b091d416adc
[novacoin.git] / doc / building novacoin-qt for android under Windows.txt
1 \feffARMV7
2 1.1 Установка архиватора 7z: http://www.7-zip.org/ 
3 (при написании инструкции использовался 7-Zip 9.20 64 bit X64, но скорее всего подойдёт любая версия)
4
5 1.2 Установка msys shell:
6 -Скачайте http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download
7 -нажмите Install
8 -директория для установки C:\MinGW
9 -поставить галочку напротив "...also install support for the graphical user interface."
10 -убрать галочки напротив "..in the start menu, and/or .." "... on the desktop"
11 -нажмите continue
12 -нажмите continue
13 -нажмите All Packages, затем MSYS
14 -поставте галочки напротив:
15 msys-autoconf-bin
16 msys-automake-bin
17 msys-base-bin
18 msys-libtool-bin
19 -нажмите Installation, Apply Changes, Apply. После завершения установки нажмите Close и закройте MinGW Installation Manager.
20
21 1.3 Установка qt-5.4.0 для Android
22 -Скачайте http://master.qt.io/archive/qt/5.4/5.4.0/qt-opensource-windows-x86-android-5.4.0.exe
23 -Запустите установщик
24 -Укажите каталог для установки(я при написании инструкции устанавливал в папку C:\Qt\Qt5.4.0)
25 -Выберите среди компонентов MinGW 4.9.1, остальные компоненты оставьте по умолчанию
26 (У меня окошко выглядит так: https://yadi.sk/i/e9W_pXTge43u5 )
27 (можно так же выбрать Android X86, и Android armv5 если собираетесь собирать под эти CPU)
28
29 1.4 Установка JAVA JDK
30 -Зайдите на сайт http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
31 -Скачайте и установите JDK(при написании инструкции использовалась jdk-8u25-windows-i586.exe )
32
33 1.5 Установка Android SDK
34 -Скачайте http://dl.google.com/android/installer_r24.0.2-windows.exe
35 -Установите в папку C:\Android\sdk
36 -Запустите SDK Manager.exe
37 -Установите Android SDK Tools 24.0.2, Android SDK Platform-tools 21, Android SDK Build-tools 21.1.2, Google USB driver, 
38 SDK Platform 21, Google API 21, ARM EABI v7a System Image
39
40 1.6 Установка Android NDK
41 -На сайте https://developer.android.com/tools/sdk/ndk/index.html#Downloads
42 -Скачайте https://dl.google.com/android/ndk/android-ndk-r10d-windows-x86_64.exe 
43 -Установите в папку C:\Android\android-ndk-r10d  (файл android-ndk-r10d-windows-x86_64.exe это самораспоковывающийся архив, который по двойному клику распаковывается в текущую папку, поэтому лучше открыть его 7-zip и выбрать папку для распаковки самостоятельно)
44 -Добавьте путь C:\Android\android-ndk-r10d\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin в системную переменную PATH
45 Подробное описание как это сделать на Windows 8, Windows 7, Windows XP и Windows Vista
46 https://www.java.com/ru/download/help/path.xml
47 (только не нужно выполнять последний пункт из этой инструкции "Откройте заново окно командной строки и выполните код java." )
48
49 Проверка что вы добавили правильный путь в переменную PATH:
50 -откройте командную строку Windows(Нажмите кнопку Windows + R одновременно. Откроется окно "Выполнить", в поле открыть наберите cmd. Нажмите Ok).
51 -наберите arm-linux-androideabi-g++ -v
52 В командной строке выведется текст. В конце текста должно быть написано:
53 Thread model: posix
54 gcc version 4.9 20140827 (prerelease) (GCC)
55
56 1.7 Установка Apache Ant
57 -Зайдите на сайт https://ant.apache.org/bindownload.cgi
58 -Скачайте архив с программой: http://apache-mirror.rbc.ru/pub/apache//ant/binaries/apache-ant-1.9.4-bin.zip 
59 -Распакуйте в папку C:\Android\apache-ant-1.9.4
60
61 1.8 Добавьте новые системные переменные(Они нужны только для пункта 2. Построение зависимостей, после этого их можно убрать)
62 -Нажмите правой кнопкой мыши на "Компьютер", в открывшемся меню нажмите "Свойства", затем "Дополнительные параметры системы", потом "Переменные среды"
63 https://yadi.sk/i/GnG9HiGme46oi
64 -В "Системные переменные" нажмите "Cоздать"(ниже будет идти список "переменная и её значение")
65 ANDROID_DEV /c/Android/android-ndk-r10d/platforms/android-9/arch-arm/usr
66 AR /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-ar
67 AS /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-as
68 CC /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc
69 CFLAGS --sysroot=/c/Android/android-ndk-r10d/platforms/android-9/arch-arm/
70 CPP /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-cpp
71 CPPFLAGS --sysroot=/c/Android/android-ndk-r10d/platforms/android-9/arch-arm/
72 CXX /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++
73 CXXFLAGS --sysroot=/c/Android/android-ndk-r10d/platforms/android-9/arch-arm/ -I/c/Android/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.9/include -I/c/Android/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include
74 LD /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-ld
75 NDK_PROJECT_PATH C:\Android\android-ndk-r10d
76 RANLIB /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-ranlib
77
78 2. Построение зависимостей.
79 В инструкции все зависимости сохраняются в папку C:\Android\deps
80
81 2.1 OpenSSL 
82 -Скачайте http://www.openssl.org/source/openssl-1.0.2.tar.gz
83 -Перейдите в папку C:\MinGW\msys\1.0 и запустите msys.bat
84 Из MinGw shell выполните следующий код:
85
86 cd /c/deps/
87 tar xvfz openssl-1.0.2.tar.gz
88 cd openssl-1.0.2
89 Configure no-shared no-dso android-armv7
90 make
91
92 2.2 Berkeley DB
93 -Скачайте http://download.oracle.com/berkeley-db/db-6.0.20.tar.gz
94 -Из MinGw shell выполните следующий код:
95
96 cd /c/deps/
97 tar xvfz db-6.0.20.tar.gz
98 cd db-6.0.20/build_unix
99 ../dist/configure --host=arm-none-linux --enable-cxx --disable-shared --disable-replication
100 make
101
102 2.3 Boost
103 -Скачайте http://sourceforge.net/projects/boost/files/boost/1.57.0/boost_1_57_0.7z/download
104 -Распакуйте boost_1_57_0.7z в папку C:\Android\deps
105 -Откройте командную строку Windows, и выполните следующий код:
106
107 cd C:\Android\deps\boost_1_57_0
108 bootstrap.bat
109
110 Не закрывайте командную строку. Откройте файл C:\Android\deps\boost_1_57_0\project-config.jam в текстовом редакторе, удалите его содержимое, вставьте следующий текст
111
112 import option ;
113   
114 using gcc : arm : arm-linux-androideabi-g++.exe ;
115  
116 option.set keep-going : false ; 
117
118 и сохраните файл
119
120 Вернитесь в командную строку и введите:
121
122 b2 --build-type=complete --with-chrono --with-filesystem --with-program_options --with-system --with-thread toolset=gcc-arm variant=release link=static threading=multi threadapi=pthread target-os=android define=BOOST_MATH_DISABLE_FLOAT128 include=C:\Android\android-ndk-r10d\sources\cxx-stl\gnu-libstdc++\4.9\include include=C:\Android\android-ndk-r10d\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi\include include=C:\Android\android-ndk-r10d\platforms\android-9\arch-arm\usr\include
123
124 После выполнения этой команды в папке C:\Android\deps\boost_1_57_0\stage\lib должны появиться следующие файлы:
125 libboost_atomic-gcc-mt-s-1_57.a
126 libboost_chrono-gcc-mt-s-1_57.a
127 libboost_filesystem-gcc-mt-s-1_57.a
128 libboost_program_options-gcc-mt-s-1_57.a
129 libboost_system-gcc-mt-s-1_57.a
130 libboost_thread_pthread-gcc-mt-s-1_57.a
131
132 2.4 LevelDB
133 -Зайдите на сайт https://github.com/novacoin-project/novacoin 
134 -Нажмите Download ZIP
135 -Распакуйте novacoin-master.zip в C:\Android
136 -Откройте MinGW shell (C:\MinGW\msys\1.0\msys.bat) и выполните следующий код:
137
138 cd /c/android/novacoin-master/src/leveldb
139 TARGET_OS=OS_ANDROID_CROSSCOMPILE make libleveldb.a libmemenv.a
140
141 2.5 ifaddrs
142 -Зайдите на сайт https://github.com/kmackay/android-ifaddrs
143 -Нажмите Download ZIP
144 -Откройте архив android-ifaddrs-master.zip , выберите файлы ifaddrs.c и ifaddrs.h и извлеките их в C:\Android\novacoin-master\src
145
146 3. Компиляция
147 3.1 Собираем Novacoin QT
148
149 Откройте файл novacoin-qt.pro
150 Вместо 
151
152 #BOOST_LIB_SUFFIX=-mgw49-mt-s-1_55
153 #BOOST_INCLUDE_PATH=C:/deps/boost_1_55_0
154 #BOOST_LIB_PATH=C:/deps/boost_1_55_0/stage/lib
155 #BDB_INCLUDE_PATH=C:/deps/db-6.0.20/build_unix
156 #BDB_LIB_PATH=C:/deps/db-6.0.20/build_unix
157 #OPENSSL_INCLUDE_PATH=C:/deps/openssl-1.0.1j/include
158 #OPENSSL_LIB_PATH=C:/deps/openssl-1.0.1j
159
160 вставьте 
161
162 USE_UPNP=-
163 USE_IPV6=0
164 USE_LEVELDB=1
165 USE_ASM=1
166
167 BOOST_LIB_SUFFIX=-gcc-mt-s-1_57
168 BOOST_INCLUDE_PATH=C:/Android/deps/boost_1_57_0
169 BOOST_LIB_PATH=C:/Android/deps/boost_1_57_0/stage/lib
170 BDB_INCLUDE_PATH=C:/Android/deps/db-6.0.20/build_unix
171 BDB_LIB_PATH=C:/Android/deps/db-6.0.20/build_unix
172 OPENSSL_INCLUDE_PATH=C:/Android/deps/openssl-1.0.2/include
173 OPENSSL_LIB_PATH=C:/Android/deps/openssl-1.0.2
174
175 Вместо
176
177 !windows|contains(USE_BUILD_INFO, 1) {
178     genbuild.depends = FORCE
179     genbuild.commands = cd $$PWD; /bin/sh share/genbuild.sh $$OUT_PWD/build/build.h
180     genbuild.target = $$OUT_PWD/build/build.h
181     PRE_TARGETDEPS += $$OUT_PWD/build/build.h
182     QMAKE_EXTRA_TARGETS += genbuild
183     DEFINES += HAVE_BUILD_INFO
184 }
185
186 вставьте
187
188 #!windows|contains(USE_BUILD_INFO, 1) {
189 #    genbuild.depends = FORCE
190 #    genbuild.commands = cd $$PWD; /bin/sh share/genbuild.sh $$OUT_PWD/build/build.h
191 #    genbuild.target = $$OUT_PWD/build/build.h
192 #    PRE_TARGETDEPS += $$OUT_PWD/build/build.h
193 #    QMAKE_EXTRA_TARGETS += genbuild
194 #    DEFINES += HAVE_BUILD_INFO
195 #}
196
197 После строки src/irc.h \ вставьте src/ifaddrs.h \ 
198 (то есть чтобы стало выглядеть так:
199 src/irc.h \
200 src/ifaddrs.h \
201 src/mruset.h \
202 )
203
204 После строки src/qt/transactiontablemodel.cpp \ вставьте  src/ifaddrs.c \
205
206 Закоментируйте строку 434 LIBS += -lrt
207 (то есть чтобы стало выглядеть так:
208 !windows:!macx {
209     DEFINES += LINUX
210 #    LIBS += -lrt
211 }
212 )
213
214 Измените строку 
215 LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX
216 на
217 LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread_pthread$$BOOST_THREAD_LIB_SUFFIX
218
219 -Откройте файл C:\Qt\Qt5.4.0\Tools\QtCreator\bin\qtcreator.exe
220 -Нажмите "Инструменты"->"Параметры", затем выберите вкладку Android
221 -Вставьте в строку "Размещение JDK" C:\Program Files (x86)\Java\jdk1.8.0_25
222 -Вставьте в строку "Размещение SDK для Android" C:\Android\sdk
223 -Вставьте в строку "Размещение NDK для Android" C:\Android\android-ndk-r10d
224 -Вставьте в строку "Программа Ant" C:\Android\apache-ant-1.9.4\bin\ant.bat
225 -Нажмите "OK"
226 -Нажмите "Файл"->"Открыть файл или проект..."
227 -Найдите "novacoin-qt.pro" и нажмите "открыть"
228 -Поставьте галочку напротив Android для armeabi-v7a(GCC 4.9, Qt 5.4.0), остальные галочки уберите
229 -Нажмите "Настроить проект"
230 -Нажмите "Проекты"->"Сборка"->"Создать шаблоны"(картинка чтобы лучше понять https://yadi.sk/i/M8mhG2tce4cEy)
231 -Нажмите "Завершить"
232 -В проекте novacoin-qt выберете Другие файлы->android->AndroidManifest.xml и задайте имя пакета, имя приложения, иконки приложения(Иконки находятся в папке C:\Android\novacoin-master\src\qt\res\icons) (Для Google Play Market иконка должна быть не менее 512x512)(https://yadi.sk/i/oY-OmnrWe4cTY)
233 -Возьмите ваш Android телефон/планшет(версия должна быть от 2.3 и выше)
234 -Перейдите в "Настройки"->"Приложения".
235 -Поставьте галочку напротив "Неизвестные источники"
236 -Перейдите в "Разработка"
237 -Поставьте галочки напротив "Отладка по USB"
238 -Подключите через USB ваш телефон/планшет к компьютеру. Не выбирайте опцию в телефоне/планшете "Включить USB-накопитель"
239 -Должно найтись Android устройство. https://yadi.sk/i/wFWZLxtie4DrN
240 Если Windows не может найти драйвер для устройства, то укажите самостоятельно в папке C:\Android\sdk\extras\google\usb_driver есть файл android_winusb.inf
241 -В QtCreator'е нажмите на зеленого робота и выберите Сборка: Выпуск
242 -Нажмите зеленую стрелку(Запустить)(https://yadi.sk/i/hKHKL_Phe4EFL)
243 -Выберите свой телефон/планшет, нажмите OK и ждите завершения компиляции.
244 -После завершения компиляции Novacoin-Qt будет установлен на ваш телефон/планшет и запущен. А в папке C:\Android\build-novacoin-qt-Android_armeabi_v7a_GCC_4_9_Qt_5_4_0-Release\android-build\bin будет файл QtApp-debug.apk. Переименуйте его в Novacoin-Qt-0.5.1-debug.apk и можно распростронять :)
245
246 Изменения для Android X86
247 1. Добавить путь C:\Android\android-ndk-r10d\toolchains\x86-4.9\prebuilt\windows-x86_64\bin в переменную PATH
248 2. Изменить системные переменные так:
249
250 ANDROID_DEV /c/Android/android-ndk-r10d/platforms/android-9/arch-x86/usr
251 AR /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-ar
252 AS /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-as
253 CC /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-gcc
254 CFLAGS --sysroot=/c/Android/android-ndk-r10d/platforms/android-9/arch-x86/
255 CPP /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-cpp
256 CPPFLAGS --sysroot=/c/Android/android-ndk-r10d/platforms/android-9/arch-x86/
257 CXX /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-g++
258 CXXFLAGS --sysroot=/c/Android/android-ndk-r10d/platforms/android-9/arch-x86/ -I/c/Android/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.9/include -I/c/Android/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include
259 LD /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-ld
260 NDK_PROJECT_PATH C:\Android\android-ndk-r10d
261 RANLIB /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-ranlib
262
263 3. При построении OpenSSL выполнить
264 Configure no-shared no-dso android-x86
265 вместо
266 Configure no-shared no-dso android-armv7
267
268 4. При построении BerkeleyDB выполнить
269 ../dist/configure --host=x86-none-linux --enable-cxx --disable-shared --disable-replication
270 вместо
271 ../dist/configure --host=arm-none-linux --enable-cxx --disable-shared --disable-replication
272
273 5. При построении Boost вставить
274 using gcc : x86 : i686-linux-android-g++.exe ;
275 вместо 
276 using gcc : arm : arm-linux-androideabi-g++.exe ;
277
278 и выполнить
279 b2 --build-type=complete --with-chrono --with-filesystem --with-program_options --with-system --with-thread toolset=gcc variant=release link=static threading=multi threadapi=pthread target-os=android define=BOOST_MATH_DISABLE_FLOAT128 include=C:\Android\android-ndk-r10d\sources\cxx-stl\gnu-libstdc++\4.9\include include=C:\Android\android-ndk-r10d\sources\cxx-stl\gnu-libstdc++\4.9\libs\x86\include include=C:\Android\android-ndk-r10d\platforms\android-9\arch-x86\usr\include
280
281 вместо
282
283 b2 --build-type=complete --with-chrono --with-filesystem --with-program_options --with-system --with-thread toolset=gcc-arm variant=release link=static threading=multi threadapi=pthread target-os=android define=BOOST_MATH_DISABLE_FLOAT128 include=C:\Android\android-ndk-r10d\sources\cxx-stl\gnu-libstdc++\4.9\include include=C:\Android\android-ndk-r10d\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi\include include=C:\Android\android-ndk-r10d\platforms\android-9\arch-arm\usr\include
284
285 6. В QtCreator выбирать Android для X86 вместо Android для armeabi-v7a