- [QT](https://www.qt.io/download-open-source/)(for QT only). Choose one for your platform for android. For example QT 5.6 under Linux would be [this file](http://download.qt.io/official_releases/qt/5.6/5.6.1-1/qt-opensource-linux-x64-android-5.6.1-1.run )
Choose one for your platform for android. For example QT 5.6 under Linux would be [this file](http://download.qt.io/official_releases/qt/5.6/5.6.1-1/qt-opensource-linux-x64-android-5.6.1-1.run)
You also need Java JDK and Ant.
You also need Java JDK and Ant.
QT-Creator (for QT only)
QT-Creator (for QT only)
------------------------
------------------------
Open QT-creator that should be installed with QT.
Open QT-creator that should be installed with QT.
Go to Settings/Anndroid and specify correct paths to SDK and NDK.
Go to Settings/Anndroid and specify correct paths to SDK and NDK.
If everything is correct you will see two set avaiable:
If everything is correct you will see two set avaiable:
@ -23,35 +25,41 @@ Android for armeabi-v7a (gcc, qt) and Android for x86 (gcc, qt).
Dependencies
Dependencies
--------------
--------------
Take following pre-compiled binaries from PurpleI2P's repositories.
Take following pre-compiled binaries from PurpleI2P's repositories.
- Change line MAIN_PATH = /path/to/libraries to an actual path where you put the dependancies to
- Open `qt/i2pd_qt/i2pd_qt.pro` in the QT-creator
- Change line `MAIN_PATH = /path/to/libraries` to an actual path where you put the dependancies to
- Select appropriate project (usually armeabi-v7a) and build
- Select appropriate project (usually armeabi-v7a) and build
- You will find an .apk file in android-build/bin folder
- You will find an .apk file in `android-build/bin` folder
Building the app without QT
Building the app without QT
---------------------------
---------------------------
- Change line I2PD_LIBS_PATH in android/jni/Application.mk to an actual path where you put the dependancies to
- Run 'ndk-build -j4' from andorid folder
- Change line `I2PD_LIBS_PATH` in `android/jni/Application.mk` to an actual path where you put the dependancies to
- Run `ndk-build -j4` from andorid folder
- Create or edit file 'local.properties'. Place 'sdk.dir=<pathtoSDK>' and 'ndk.dir=<pathtoNDK>'
- Create or edit file 'local.properties'. Place 'sdk.dir=<pathtoSDK>' and 'ndk.dir=<pathtoNDK>'
- Run 'ant clean debug'
- Run `ant clean debug`
Creating release .apk
Creating release .apk
----------------------
----------------------
In order to create release .apk you must obtain a Java keystore file(.jks). Either you have in already, or you can generate it yourself using keytool, or from one of you existing well-know ceritificates. For example, i2pd release are signed with this [certificate](https://github.com/PurpleI2P/i2pd/blob/openssl/contrib/certificates/router/orignal_at_mail.i2p.crt).
Create file 'ant.propeties'
In order to create release .apk you must obtain a Java keystore file(.jks). Either you have in already, or you can generate it yourself using keytool, or from one of you existing well-know ceritificates.
key.store='path to keystore file'
For example, i2pd release are signed with this [certificate](https://github.com/PurpleI2P/i2pd/blob/openssl/contrib/certificates/router/orignal_at_mail.i2p.crt).
* `WITH_STATIC` build static versions of library and i2pd binary
* `WITH_UPNP` build with UPnP support (requires libminiupnp)
* `WITH_AESNI` build with AES-NI support (ON/OFF)
* `WITH_HARDENING` enable hardening features (ON/OFF) (gcc only)
* `WITH_PCH` use pre-compiled header (experimental, speeds up build)
Also there is `-L` flag for CMake that could be used to list current cached options:
cmake -L
Debian/Ubuntu
Debian/Ubuntu
-------------
-------------
You will need a compiler and other tools that could be installed with `build-essential` package:
You will need a compiler and other tools that could be installed with `build-essential` package:
```bash
sudo apt-get install build-essential
sudo apt-get install build-essential
```
Also you will need a bunch of development libraries:
Also you will need a bunch of development libraries:
```bash
sudo apt-get install \
sudo apt-get install \
libboost-chrono-dev \
libboost-chrono-dev \
libboost-date-time-dev \
libboost-date-time-dev \
libboost-filesystem-dev \
libboost-filesystem-dev \
libboost-program-options-dev \
libboost-program-options-dev \
libboost-system-dev \
libboost-system-dev \
libboost-thread-dev \
libboost-thread-dev \
libssl-dev
libssl-dev
```
If you need UPnP support miniupnpc development library should be installed (don't forget to rerun CMake with needed option):
If you need UPnP support (don't forget to run CMake with `WITH_UPNP=ON`) miniupnpc development library should be installed:
```bash
sudo apt-get install libminiupnpc-dev
sudo apt-get install libminiupnpc-dev
```
You may also build deb-package with the following:
You may also build deb-package with the following:
```bash
sudo apt-get install fakeroot devscripts
sudo apt-get install fakeroot devscripts
cd i2pd
cd i2pd
debuild --no-tgz-check
debuild --no-tgz-check
```
Fedora/Centos
Fedora/Centos
-------------
-------------
You will need a compiler and other tools to perform a build:
You will need a compiler and other tools to perform a build:
```bash
sudo yum install make cmake gcc gcc-c++
```
*Latest Fedora system using [DNF](https://en.wikipedia.org/wiki/DNF_(software)) instead of YUM by default, you may prefer to use DNF, but YUM should be ok*
sudo yum install make cmake gcc gcc-c++
Also you will need a bunch of development libraries
Also you will need a bunch of development libraries
```bash
sudo yum install boost-devel openssl-devel
sudo yum install boost-devel openssl-devel
```
If you need UPnP support miniupnpc development library should be installed (don't forget to rerun CMake with needed option):
If you need UPnP support (don't forget to run CMake with `WITH_UPNP=ON`) miniupnpc development library should be installed:
```bash
sudo yum install miniupnpc-devel
miniupnpc-devel
```
Latest Fedora systems using [DNF](https://en.wikipedia.org/wiki/DNF_(software)) instead of YUM by default, you may prefer to use DNF, but YUM should be ok
> *Centos 7 has CMake 2.8.11 in the official repositories that too old to build i2pd, CMake >=2.8.12 is required.*
>
Centos 7 has CMake 2.8.11 in the official repositories that too old to build i2pd, CMake >=2.8.12 is required.
> But you can use cmake3 from the epel repository: