Compare commits
57 Commits
android-0.
...
android-0.
Author | SHA1 | Date | |
---|---|---|---|
f69f748064 | |||
640a2e1918 | |||
8aead91700 | |||
b18a2e6241 | |||
09c3e6e12c | |||
74bf0eade2 | |||
2fa6e7f3cb | |||
24b741be1e | |||
ac8ce6f916 | |||
cd7d0ad723 | |||
c5a0c3608d | |||
3863c0e183 | |||
69ea3d8bde | |||
7cafe6da48 | |||
9464b46ad0 | |||
c230a5a101 | |||
3d37f2ae07 | |||
f88aafe292 | |||
aa2dab1d3c | |||
8e85eaa2f0 | |||
6a1848caf6 | |||
aa36b4cb14 | |||
78d4b12142 | |||
c2f3a80dec | |||
a679784aab | |||
835667437b | |||
f016edec7a | |||
1e3b517219 | |||
f4e3b15fcf | |||
fc4154be67 | |||
5bf0b18767 | |||
eb5ef3129b | |||
6e87d248c0 | |||
c9b0aff142 | |||
5acac0dbc4 | |||
0b42a7ee64 | |||
c3a798ee3d | |||
e682369311 | |||
14b953f145 | |||
036c807d6b | |||
a41fca95df | |||
26fdf40f25 | |||
070af6529c | |||
7ba0892351 | |||
5b9cdb9f9f | |||
b79d39a74a | |||
5fc5aed0c9 | |||
aec25ab374 | |||
9d5c495936 | |||
4dc2bb6b01 | |||
373e013911 | |||
83bb7096a7 | |||
69ad581235 | |||
4be227631d | |||
3f3f1f8e3d | |||
22290da1a4 | |||
a523e1cb4a |
52
.mtn-ignore
52
.mtn-ignore
@ -1,52 +0,0 @@
|
||||
# Just to try and prevent some noob disasters.
|
||||
# Use mtn add --no-respect-ignore foo.jar to ignore this ignore list
|
||||
_jsp\.java$
|
||||
\.bz2$
|
||||
\.class$
|
||||
\.diff$
|
||||
\.exe$
|
||||
\.fba$
|
||||
\.gz$
|
||||
\.jar$
|
||||
\.out$
|
||||
\.patch$
|
||||
\.sig$
|
||||
\.sud$
|
||||
\.su2$
|
||||
\.tar$
|
||||
\.war$
|
||||
\.zip$
|
||||
^\.
|
||||
^build/
|
||||
^pkg-temp/
|
||||
~$
|
||||
/build/
|
||||
/classes/
|
||||
|
||||
# Android-specific ignores
|
||||
^lib/client/libs
|
||||
^routerjars/libs
|
||||
local.properties
|
||||
signing.properties
|
||||
|
||||
#IntelliJ IDEA
|
||||
^.idea
|
||||
.*.iml
|
||||
.*.ipr
|
||||
.*.iws
|
||||
|
||||
#Gradle
|
||||
build
|
||||
|
||||
# I2P-specific ignores
|
||||
^app/src/main/res/drawable/i2plogo.png
|
||||
^app/src/main/res/raw/blocklist_txt
|
||||
^app/src/main/res/raw/hosts_txt
|
||||
^app/src/main/res/raw/.*_ht
|
||||
^app/src/main/res/raw/license_
|
||||
^app/src/main/res/raw/certificates_zip
|
||||
^app/src/main/assets/themes/console/images
|
||||
^app/src/main/assets/themes/console/light/console.css
|
||||
^app/src/main/assets/themes/console/light/images/header.png
|
||||
^scripts/build.number
|
||||
^scripts/version.properties
|
20
CHANGELOG
20
CHANGELOG
@ -1,3 +1,23 @@
|
||||
0.9.50 2021-05-18
|
||||
* This release updates the underlying I2P libraries to I2P version 0.9.50
|
||||
|
||||
0.9.48 2020-12-02
|
||||
* This release updates the underlying I2P libraries to I2P version 0.9.48
|
||||
* Updates to browser configuration documentation
|
||||
|
||||
0.9.47-1 2020-10-29
|
||||
* This release fixes a number of bugs arising from a misconfigured bootclasspath
|
||||
* Fix a battery-management issue arising on some phones
|
||||
|
||||
0.9.47 / 2020-08-26
|
||||
* Notification bug-fixes on platforms >8.0
|
||||
|
||||
0.9.46 / 2020-06-03
|
||||
* catch ActivityNotFound exception in MainActivity
|
||||
|
||||
0.9.45 / 2020-03-07
|
||||
* No significant changes
|
||||
|
||||
0.9.44 / 2019-12-03
|
||||
* Updated translations
|
||||
* Bumped target sdk version to 28, enforced by google
|
||||
|
91
DOCKER.md
Normal file
91
DOCKER.md
Normal file
@ -0,0 +1,91 @@
|
||||
Docker Build Instructions
|
||||
=========================
|
||||
|
||||
It is possible to build a container with a pre-installed environment for
|
||||
correctly compiling an I2P for Android development build. Unlike the i2p.i2p
|
||||
container, zero attempt has been made to optimize the size of the container,
|
||||
as it contains a copy of the latest Android SDK, toolchains, and Android NDK,
|
||||
which it must download. To save time, this is cached locally. It is likely to
|
||||
take up to 30 GB of disk space to compile in this way, however, it is very easy
|
||||
and convenient compared to the steps in RELEASE-PROCESS.md and may make
|
||||
building Android reproducibly easier in the future.
|
||||
|
||||
Container dependencies
|
||||
----------------------
|
||||
|
||||
- `menny/android_ndk` (third-party image) (reviewed by idk) (depends on menny/android_sdk
|
||||
- `menny/android_sdk` (third-party image) (reviewed by idk) (depends on ubuntu/18.04)
|
||||
- `ubuntu/18.04` (official docker container) (base container)
|
||||
|
||||
Build the container locally
|
||||
---------------------------
|
||||
|
||||
Run:
|
||||
|
||||
docker build -t i2p.android.base .
|
||||
|
||||
To build the container. It will have a lot to download the first time, so it may take
|
||||
a while to complete.
|
||||
|
||||
Run an Android build in the container
|
||||
-------------------------------------
|
||||
|
||||
Copy the `etc/docker.signing.example.proprties` file to `etc/docker.signing.proprties`,
|
||||
edit it to match your key information and rebuild the container.
|
||||
|
||||
Run:
|
||||
|
||||
docker run -it \
|
||||
-u $(id -u):$(id -g) \
|
||||
--name i2p.android.base \
|
||||
-v $HOME/.gnupg/:/.gnupg/:ro \
|
||||
-v $HOME/.i2p-plugin-keys/:/.i2p-plugin-keys/:ro \
|
||||
-v /run/user/$(id -u)/:/run/user/$(id -u)/:ro \
|
||||
i2p.android.base
|
||||
|
||||
To get the build artifacts for uploading to Maven out of the container, use:
|
||||
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.i2p/pkg-mavencentral app/pkg-mavencentral
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.i2p/mavencentral-i2p.jar app/pkg-mavencentral
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.i2p/mavencentral-mstreaming.jar app/pkg-mavencentral
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.i2p/mavencentral-router.jar app/pkg-mavencentral
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.i2p/mavencentral-servlet-i2p.jar app/pkg-mavencentral
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.i2p/mavencentral-streaming.jar app/pkg-mavencentral
|
||||
|
||||
To get the Android build artifacts out of the container, use:
|
||||
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.android.base/app/build/ app/build
|
||||
|
||||
And your android applications will appear in the `app/build` directory, in the same
|
||||
place where non-container builds would go.
|
||||
|
||||
If you encounter a permissions error when rebuilding, delete the `app/build`,
|
||||
`app/pkg-mavencentral` and `app/pkg-temp` path.
|
||||
|
||||
rm -rf app/pkg-temp app/build app/pkg-mavencentral
|
||||
|
||||
Copypasta
|
||||
---------
|
||||
|
||||
Once you have set up builds for the first time, from then on you can update the container and
|
||||
build a fresh set of Maven jars and a new I2P for Android app by copy-pasting the following
|
||||
commands:
|
||||
|
||||
``` sh
|
||||
rm -rf app/pkg-temp app/build app/pkg-mavencentral
|
||||
docker build -t i2p.android.base .
|
||||
docker run -it \
|
||||
-u $(id -u):$(id -g) \
|
||||
--name i2p.android.base \
|
||||
-v $HOME/.gnupg/:/.gnupg/:ro \
|
||||
-v $HOME/.i2p-plugin-keys/:/.i2p-plugin-keys/:ro \
|
||||
-v /run/user/$(id -u)/:/run/user/$(id -u)/:ro \
|
||||
i2p.android.base
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.i2p/pkg-mavencentral app/pkg-mavencentral
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.i2p/mavencentral-i2p.jar app/pkg-mavencentral
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.i2p/mavencentral-mstreaming.jar app/pkg-mavencentral
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.i2p/mavencentral-router.jar app/pkg-mavencentral
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.i2p/mavencentral-servlet-i2p.jar app/pkg-mavencentral
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.i2p/mavencentral-streaming.jar app/pkg-mavencentral
|
||||
docker cp i2p.android.base:/opt/workspace/i2p.android.base/app/build/ app/build
|
||||
```
|
39
Dockerfile
Normal file
39
Dockerfile
Normal file
@ -0,0 +1,39 @@
|
||||
FROM menny/android_ndk
|
||||
ENV VERSION=0.9.50
|
||||
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
|
||||
RUN echo 'deb https://deb.i2p2.de/ sid main' >> /etc/apt/sources.list
|
||||
RUN echo 'deb-src https://deb.i2p2.de/ sid main' >> /etc/apt/sources.list
|
||||
RUN echo 'deb http://archive.ubuntu.com/ubuntu trusty universe' >> /etc/apt/sources.list
|
||||
RUN wget -O /etc/apt/trusted.gpg.d/i2p-debian-repo.key.asc https://geti2p.net/_static/i2p-debian-repo.key.asc
|
||||
COPY etc/debian-jessie-repo.key.asc /etc/apt/trusted.gpg.d
|
||||
RUN mkdir -p /opt/packages && wget -O /opt/packages/openjdk-7-jre-headless.deb http://security.debian.org/debian-security/pool/updates/main/o/openjdk-7/openjdk-7-jre-headless_7u261-2.6.22-1~deb8u1_amd64.deb
|
||||
RUN apt-get update
|
||||
RUN apt-get build-dep -y i2p i2p-router
|
||||
RUN apt-get install -y ant openjdk-8* libxml2-utils junit4 libhamcrest-java libmockito-java libmaven-ant-tasks-java dpkg-sig maven
|
||||
RUN cd /opt/packages && dpkg-sig -l openjdk-7-jre-headless.deb && dpkg -x openjdk-7-jre-headless.deb /opt/packages/openjdk-7-jre
|
||||
RUN git clone https://i2pgit.org/i2p-hackers/i2p.i2p --depth=1 -b i2p-$VERSION /opt/workspace/i2p.i2p
|
||||
RUN update-java-alternatives --jre-headless --set java-1.8.0-openjdk-amd64
|
||||
RUN update-java-alternatives --set java-1.8.0-openjdk-amd64
|
||||
RUN update-alternatives --set javac /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
|
||||
RUN update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
|
||||
RUN rm /opt/java/openjdk/ -rfv
|
||||
COPY . /opt/workspace/i2p.android.base
|
||||
COPY etc/docker.local.ndk.properties /opt/workspace/i2p.android.base/client/local.properties
|
||||
COPY etc/docker.local.router.properties /opt/workspace/i2p.android.base/routerjars/local.properties
|
||||
COPY etc/docker.local.sdk.properties /opt/workspace/i2p.android.base/local.properties
|
||||
COPY etc/docker.override.properties /opt/workspace/i2p.android.base/override.properties
|
||||
COPY etc/docker.override.properties /opt/workspace/i2p.i2p/override.properties
|
||||
COPY etc/docker.signing.properties /opt/workspace/i2p.android.base/signing.properties
|
||||
WORKDIR /opt/workspace/i2p.android.base
|
||||
RUN find /opt/android-sdk-linux -type d -print0 | xargs -0 chown -R 1000:1000
|
||||
RUN find /opt/android-sdk-linux -type d -print0 | xargs -0 chmod -Rc o+rw
|
||||
RUN find /opt/android-sdk-linux -type d -print0 | xargs -0 chmod -c 0755
|
||||
RUN find /opt/workspace -type d -print0 | xargs -0 chown -R 1000:1000
|
||||
RUN find /opt/workspace -type d -print0 | xargs -0 chmod -Rc o+rw
|
||||
RUN find /opt/workspace -type d -print0 | xargs -0 chmod -c 0755
|
||||
CMD cd /opt/workspace/i2p.i2p && \
|
||||
ant -k mavenCentral; \
|
||||
cp -v *.jar pkg-mavencentral/; \
|
||||
cd /opt/workspace/i2p.android.base && \
|
||||
./gradlew --continue dependencies || true ; \
|
||||
./gradlew --continue assembleRelease
|
@ -1,59 +1,120 @@
|
||||
# Release Process
|
||||
|
||||
Note to all future maintainers: We have 4 channels that need to be updated in order to have a successful
|
||||
Android release. Many of these channels are updated at different rates, and at times you must wait on a
|
||||
third-party service to complete it's tasks before you may continue. When completing an Android release,
|
||||
keep in mind that you must update 1) Maven 2) Google Play 3) f-droid.i2p.io and 4) F-Droid main
|
||||
repository.
|
||||
|
||||
At the time of this revision, 2020/09/13, the main Android maintainer is idk. idk updates Maven, Google
|
||||
Play, and f-droid.i2p.io, and nextl00p handles working with the F-Droid project to provide an I2P release
|
||||
in their main repository.
|
||||
|
||||
NOTE: The docker container built by the Dockerfile in this repostory ensures that the Pre-requisites and
|
||||
Dependencies are properly met by obtaining them from the Debian package in `oldoldstable` and pre-configuring
|
||||
the override.properties that is used in the Docker container.
|
||||
|
||||
**>> Beginning of Docker-enabled Steps <<**
|
||||
|
||||
## Prerequirements
|
||||
|
||||
1. Ensure you got the deprecated maven ant tasks. ( https://maven.apache.org/ant-tasks/download.cgi )
|
||||
2. It should exist at `~/.ant/lib/maven-ant-tasks-2.1.3.jar`
|
||||
3. Ensure you got hamcrest-integration, hamcrest-library, hamcrest-core in the hamcrest.home directory.
|
||||
4. Ensure junit 4.12 at least in junit.home, ensure the jar file is named `junit4.jar`.
|
||||
5. Ensure to have updated the changelog with the changes done.
|
||||
1. Ensure you have the deprecated maven ant tasks. ( https://maven.apache.org/ant-tasks/download.cgi )
|
||||
2. It should exist at `~/.ant/lib/maven-ant-tasks-2.1.3.jar`
|
||||
3. Ensure you have hamcrest-integration, hamcrest-library, hamcrest-core in the hamcrest.home directory.
|
||||
4. Ensure junit 4.12 at least in junit.home, ensure the jar file is named `junit4.jar`.
|
||||
5. Ensure you have the Mockito framework and accompanying documentation in your $JAVA_HOME
|
||||
6. Ensure to have updated the changelog with the changes done.
|
||||
7. Ensure that you are configured to build i2p.i2p with Java 8. On Debian it is easiest to set with
|
||||
`update-java-alternatives --set java-8-openjdk-amd64` and picking Java 8. **TODO:** add instructions for non-Debian-based
|
||||
systems.
|
||||
8. Ensure that you have a Java 1.7 bootclasspath available. (See **Maven Central** step 2A.)
|
||||
|
||||
## Maven Central
|
||||
## Get all the dependencies ready
|
||||
|
||||
1. Check out a clean copy of i2p.i2p at the correct release version. (Make a clean checkout)
|
||||
2. Build the maven packages via `ant mavenCentral` where you end up with mavencentral-*.jar files in the current directory.
|
||||
3. Login to http://oss.sonatype.org for uploading the mavencentral-*.jar bundles.
|
||||
4. In nexus, choose "Staging Upload" and upload all of the bundles with upload mode set to "Artifact Bundle"
|
||||
5. Under "Staging Repositories" ensure all where uploaded correctly, select them all and press "Release" in the toolbar.
|
||||
### Maven Central
|
||||
|
||||
## Android Common Build
|
||||
1. Check out a clean copy of i2p.i2p at the correct release version. (Make a clean checkout)
|
||||
2. Build the maven packages via `ant mavenCentral` where you end up with mavencentral-*.jar files in the
|
||||
current directory.
|
||||
2. **A)** I2P for Android requires a Java 1.7 bootclasspath, but the servlet jar requires Java 8. So, to do the builds:
|
||||
- First set `javac.compilerargs=-bootclasspath /path/to/java/7/rt.jar:/path/to/java/7/jce.jar` in override.properties
|
||||
- Build with `ant mavenCentral`
|
||||
|
||||
1. Edit `routerjars/local.properties` to use the clean i2p.i2p copy.
|
||||
2. Pull the latest translations with `tx pull -a` and commit them. (If you don't have the `tx` command, do `pip install transifex-client` )
|
||||
2a. If there are any new translations, `mtn add` them, and add them to `app/src/main/res/values/arrays.xml` (two places, alphabetical order please)
|
||||
3. Ensure that `signing.properties` contains the details of the release key.
|
||||
4. Edit `gradle.properties` to bump the I2P version.
|
||||
5. Edit `app/build.gradle` to bump the Android version number.
|
||||
6. Edit `CHANGELOG` to add the release and date.
|
||||
7. If the helper has changed since the last release, edit
|
||||
`lib/helper/gradle.properties` to bump the version.
|
||||
8. `./gradlew clean assembleRelease`
|
||||
**>> End of Docker-enabled Steps for Maven <<**
|
||||
|
||||
3. Login to http://oss.sonatype.org for uploading the mavencentral-*.jar bundles.
|
||||
4. In nexus, choose "Staging Upload" and upload all of the files with upload mode set to "Artifacts with POM".
|
||||
When uploading the files to nexus, you *must* upload the pom.xml files, and all of their artifacts. For each
|
||||
component, you will need to upload a *.jar, a *.jar.asc, a *sources.jar, a *sources.jar.asc, a javadoc.jar,
|
||||
and a javadoc.jar.asc, and a pom.xml and a pom.xml.asc from the pkg-mavencentral directory during the "Upload
|
||||
Artifacts with POM" operation. You will need to do this once for each component you upload to Nexus.
|
||||
5. Under "Staging Repositories" ensure all where uploaded correctly, select them all and press "Release"
|
||||
in the toolbar.
|
||||
|
||||
#### Example override.properties:
|
||||
|
||||
javac.version=1.7
|
||||
javac.target=1.7
|
||||
javac.source=1.8
|
||||
javac.compilerargs=-bootclasspath /home/user/StudioProjects/java7bootclasspath/rt.jar:/home/user/StudioProjects/java7bootclasspath/jce.jar
|
||||
javac.compilerargs7=-bootclasspath /home/user/StudioProjects/java7bootclasspath/rt.jar:/home/user/StudioProjects/java7bootclasspath/jce.jar
|
||||
build.built-by=name
|
||||
|
||||
### Android Common Build
|
||||
|
||||
Using Docker: in order to use Docker to generate a new Android apk for release, you will
|
||||
need to run the build twice, once for the mavenCentral jars, and once for the actual Android
|
||||
app. After doing the Maven release, follow these steps in the i2p.android.base repository, and re-run
|
||||
the `docker run` step described in `DOCKER.md`
|
||||
|
||||
1. Edit `routerjars/local.properties` to use the clean i2p.i2p copy.
|
||||
2. Pull the latest translations with `tx pull -a` and commit them. (If you don't have the `tx` command,
|
||||
do `pip install transifex-client` )
|
||||
- If there are any new translations, `mtn add` them, and add them to `app/src/main/res/values/arrays.xml`
|
||||
(two places, alphabetical order please)
|
||||
3. Ensure that `signing.properties` contains the details of the release key. If you are using Docker, see
|
||||
`DOCKER.md` to perform this step for Docker builds by editing `etc/docker.signing.properties` instead.
|
||||
4. Edit `gradle.properties` to bump the I2P version.
|
||||
5. Edit `app/build.gradle` to bump the Android version number.
|
||||
6. Edit `CHANGELOG` to add the release and date.
|
||||
7. If the helper has changed since the last release, edit
|
||||
`lib/helper/gradle.properties` to bump the version.
|
||||
8. `./gradlew clean assembleRelease`
|
||||
|
||||
### Libraries
|
||||
|
||||
1. `./gradlew :lib:client:uploadArchives`
|
||||
2. If the helper version was changed and should be released: `./gradlew :lib:helper:uploadArchives`
|
||||
3. Check on Sonatype that everything worked, and close/release.
|
||||
1. `./gradlew :lib:client:uploadArchives`
|
||||
2. If the helper version was changed and should be released: `./gradlew :lib:helper:uploadArchives`
|
||||
3. Check on Sonatype that everything worked, and close/release.
|
||||
|
||||
## F-Droid Guide
|
||||
## Release Packages
|
||||
|
||||
1. Ensure you have the release keys, the keyfile must be placed at `~/.local/share/fdroidserver/keystore.jks`
|
||||
2. If it's the first time, or you have reinstalled anything, ensure `path/to/fdroid/config.py` has correct information.
|
||||
3. Assuming you already have ran `./gradlew clean assembleRelease` from a earlier step, continue.
|
||||
4. `cp app/build/outputs/apk/free/release/app-free-release.apk path/to/fdroid/repo/I2P-VERSION.apk`
|
||||
5. Update `path/to/fdroid/metadata/net.i2p.android.txt` (The versions at the bottom of the file)
|
||||
6. Run `fdroid update` from inside the fdroid path (install fdroid command via `pip install fdroidserver`)
|
||||
7. Zip/tar the local fdroid repo and archive. `rm fdroid.tgz && tar czf fdroid.tgz archive/ repo/` from the fdroid directory.
|
||||
8. Push to download server and put in place. (via SSH for example, `scp fdroid.tgz download.i2p2.de:~/`)
|
||||
9. On the server run `bin-fd/update-fdroid` and `sudo bin-fd/update-app i2p 0.9.40` (This ensures we use the exact same apk file for the download page as in fdroid and gplay)
|
||||
10. Check F-Droid repo works, and app works.
|
||||
### F-Droid Guide
|
||||
|
||||
## Google Play and finishing up
|
||||
This guide is for f-droid.i2p.io, not for F-Droid's main repository. The repository keystore **and** the
|
||||
config.py used to generate the repository are required to complete this process successfully.
|
||||
|
||||
1. Verify which files that are changed via `mtn ls cha`. It shouldn't be much more than those bellow this line and possible translations (`mtn ls unk`).
|
||||
2. Commit your release changes, `mtn ci gradle.properties lib/helper/gradle.properties app/build.gradle`
|
||||
3. Push free and donate builds to Google Play via https://play.google.com/apps/publish/
|
||||
4. Tag the new release. Example `mtn tag h: android-0.9.36`
|
||||
5. Push the monotone changes
|
||||
6. Update download page (version and hash, including F-Droid)
|
||||
1. Ensure you have the release keys, the keyfile must be placed at `~/.local/share/fdroidserver/keystore.jks`
|
||||
2. If it's the first time, or you have reinstalled anything, ensure `path/to/fdroid/config.py` has correct
|
||||
information.
|
||||
3. Assuming you already have ran `./gradlew clean assembleRelease` from a earlier step, continue.
|
||||
4. `cp app/build/outputs/apk/free/release/app-free-release.apk path/to/fdroid/repo/I2P-VERSION.apk`
|
||||
5. Update `path/to/fdroid/metadata/net.i2p.android.txt` (The versions at the bottom of the file)
|
||||
6. Run `fdroid update` from inside the fdroid path (install fdroid command via `pip install fdroidserver`)
|
||||
7. Zip/tar the local fdroid repo and archive. `rm fdroid.tgz && tar czf fdroid.tgz archive/ repo/` from the
|
||||
fdroid directory.
|
||||
8. Push to download server and put in place. (via SSH for example, `scp fdroid.tgz download.i2p2.de:~/`)
|
||||
9. On the server run `bin-fd/update-fdroid` and `sudo bin-fd/update-app i2p 0.9.40` (This ensures we use the
|
||||
exact same apk file for the download page as in fdroid and gplay)
|
||||
10. Check F-Droid repo works, and app works.
|
||||
|
||||
### Google Play and finishing up
|
||||
|
||||
1. Verify which files that are changed via `mtn ls cha`. It shouldn't be much more than those bellow this
|
||||
line and possible translations (`mtn ls unk`).
|
||||
2. Commit your release changes, `mtn ci gradle.properties lib/helper/gradle.properties app/build.gradle`
|
||||
3. Push free and donate builds to Google Play via https://play.google.com/apps/publish/
|
||||
4. Tag the new release. Example `mtn tag h: android-0.9.36`
|
||||
5. Push the monotone changes. Make sure that they are there at the next git sync.
|
||||
6. Update download page (version and hash, including F-Droid)
|
||||
|
||||
|
@ -7,7 +7,7 @@ repositories {
|
||||
android {
|
||||
compileSdkVersion 28
|
||||
defaultConfig {
|
||||
versionCode 4745256
|
||||
versionCode 4745261
|
||||
versionName "$I2P_VERSION"
|
||||
minSdkVersion 14
|
||||
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION as String)
|
||||
@ -114,7 +114,7 @@ task copyI2PResources(type: Copy) {
|
||||
outputs.upToDateWhen { false }
|
||||
into 'src/main/res'
|
||||
into('drawable') {
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/i2plogo.png')
|
||||
from file(i2pbase + '/apps/routerconsole/jsp/themes/console/images/i2plogo.png')
|
||||
}
|
||||
into('raw') {
|
||||
from(i2pbase + '/installer/resources/blocklist.txt') { rename { 'blocklist_txt' } }
|
||||
@ -177,15 +177,15 @@ task copyI2PAssets(type: Copy) {
|
||||
outputs.upToDateWhen { false }
|
||||
into 'src/main/assets/themes/console'
|
||||
into('images') {
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/i2plogo.png')
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/inbound.png')
|
||||
from file(i2pbase + '/installer/resources/themes/console/images/outbound.png')
|
||||
from file(i2pbase + '/apps/routerconsole/jsp/themes/console/images/i2plogo.png')
|
||||
from file(i2pbase + '/apps/routerconsole/jsp/themes/console/images/inbound.png')
|
||||
from file(i2pbase + '/apps/routerconsole/jsp/themes/console/images/outbound.png')
|
||||
}
|
||||
into('light') {
|
||||
from file(i2pbase + '/installer/resources/themes/console/light/console.css')
|
||||
from file(i2pbase + '/apps/routerconsole/jsp/themes/console/light/console.css')
|
||||
}
|
||||
into('light/images') {
|
||||
from file(i2pbase + '/installer/resources/themes/console/light/images/header.png')
|
||||
from file(i2pbase + '/apps/routerconsole/jsp/themes/console/light/images/header.png')
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -92,7 +92,7 @@ class InitActivities {
|
||||
|
||||
File docsDir = new File(myDir, "docs");
|
||||
docsDir.mkdir();
|
||||
copyResourceToFile(R.raw.ahelper_conflict_header_ht, "docs/ahelper-conflict-header.ht");
|
||||
/*copyResourceToFile(R.raw.ahelper_conflict_header_ht, "docs/ahelper-conflict-header.ht");
|
||||
copyResourceToFile(R.raw.ahelper_new_header_ht, "docs/ahelper-new-header.ht");
|
||||
copyResourceToFile(R.raw.ahelper_notfound_header_ht, "docs/ahelper-notfound-header.ht");
|
||||
copyResourceToFile(R.raw.auth_header_ht, "docs/auth-header.ht");
|
||||
@ -110,7 +110,7 @@ class InitActivities {
|
||||
copyResourceToFile(R.raw.noproxy_header_ht, "docs/noproxy-header.ht");
|
||||
copyResourceToFile(R.raw.protocol_header_ht, "docs/protocol-header.ht");
|
||||
copyResourceToFile(R.raw.reset_header_ht, "docs/reset-header.ht");
|
||||
copyResourceToFile(R.raw.resetp_header_ht, "docs/resetp-header.ht");
|
||||
copyResourceToFile(R.raw.resetp_header_ht, "docs/resetp-header.ht");*/
|
||||
|
||||
File cssDir = new File(docsDir, "themes/console/light");
|
||||
cssDir.mkdirs();
|
||||
|
@ -5,11 +5,13 @@ import android.os.Build;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.android.util.FragmentUtils;
|
||||
@ -129,6 +131,17 @@ public class TunnelEntryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
|
||||
}
|
||||
}
|
||||
|
||||
private void setClipboard(Context context, String text) {
|
||||
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) {
|
||||
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
clipboard.setText(text);
|
||||
} else {
|
||||
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", text);
|
||||
clipboard.setPrimaryClip(clip);
|
||||
}
|
||||
}
|
||||
|
||||
// Replace the contents of a view (invoked by the layout manager)
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
|
||||
@ -183,6 +196,19 @@ public class TunnelEntryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
|
||||
ViewCompat.getTransitionName(tvh.status));
|
||||
Pair<View, String>[] pairs = new Pair[]{ statusPair};
|
||||
mListener.onTunnelSelected(tunnel.getId(), pairs);
|
||||
view.invalidate();
|
||||
}
|
||||
});
|
||||
tvh.itemView.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
//@Override
|
||||
public boolean onLongClick(View view) {
|
||||
setClipboard(mCtx, tunnel.getDestHashBase32());
|
||||
Toast clipboardMessage = Toast.makeText(mCtx, R.string.copied_base32_system_notification_title, Toast. LENGTH_LONG);
|
||||
clipboardMessage.setGravity(Gravity.TOP, 0, 0); //optional
|
||||
clipboardMessage.show();
|
||||
view.invalidate();
|
||||
return true;
|
||||
|
||||
}
|
||||
});
|
||||
break;
|
||||
@ -190,6 +216,7 @@ public class TunnelEntryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Return the size of the dataset (invoked by the layout manager)
|
||||
|
@ -16,6 +16,7 @@ import android.preference.PreferenceManager;
|
||||
import android.provider.Settings;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.util.AndroidRuntimeException;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@ -27,6 +28,7 @@ import android.widget.ScrollView;
|
||||
import android.widget.TableLayout;
|
||||
import android.widget.TableRow;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import android.widget.ToggleButton;
|
||||
|
||||
import net.i2p.android.I2PActivityBase;
|
||||
@ -646,32 +648,36 @@ public class MainFragment extends I2PFragmentBase {
|
||||
PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
|
||||
if (!pm.isIgnoringBatteryOptimizations(packageName)) {
|
||||
AlertDialog.Builder b = new AlertDialog.Builder(getActivity());
|
||||
b.setTitle(R.string.configure_no_doze_title)
|
||||
.setMessage(R.string.configure_no_doze)
|
||||
.setCancelable(false)
|
||||
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int i) {
|
||||
String packageName = mContext.getPackageName();
|
||||
dialog.dismiss();
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, true);
|
||||
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
|
||||
intent.setData(Uri.parse("package:" + packageName));
|
||||
try {
|
||||
mContext.startActivity(intent);
|
||||
} catch (ActivityNotFoundException activityNotFound) {
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, true);
|
||||
}
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int i) {
|
||||
dialog.cancel();
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, false);
|
||||
}
|
||||
})
|
||||
.show();
|
||||
b.setTitle(R.string.configure_no_doze_title);
|
||||
b.setMessage(R.string.configure_no_doze);
|
||||
b.setCancelable(false);
|
||||
b.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int i) {
|
||||
String packageName = mContext.getPackageName();
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, false);
|
||||
dialog.dismiss();
|
||||
// Simply do not re-attempt a battery optimization after the first time,
|
||||
// even if an error occurs. http://trac.i2p2.i2p/ticket/2783
|
||||
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
|
||||
intent.setData(Uri.parse("package:" + packageName));
|
||||
try {
|
||||
mContext.startActivity(intent);
|
||||
} catch (ActivityNotFoundException activityNotFound) {
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, false);
|
||||
} catch (AndroidRuntimeException activityNotFound) {
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, false);
|
||||
}
|
||||
}
|
||||
});
|
||||
b.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int i) {
|
||||
dialog.cancel();
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, false);
|
||||
}
|
||||
});
|
||||
b.show();
|
||||
}
|
||||
} else {
|
||||
ab.setPref(PREF_CONFIGURE_BATTERY, false);
|
||||
|
@ -5,6 +5,7 @@ import android.content.Context;
|
||||
//import net.i2p.BOB.BOB;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.addressbook.DaemonThread;
|
||||
import android.preference.PreferenceManager;
|
||||
import net.i2p.android.apps.NewsFetcher;
|
||||
import net.i2p.android.router.util.Notifications;
|
||||
import net.i2p.android.router.util.Util;
|
||||
@ -14,8 +15,11 @@ import net.i2p.router.JobImpl;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.router.startup.RouterAppManager;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
import net.i2p.sam.SAMBridge;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* Load the clients we want.
|
||||
@ -41,6 +45,7 @@ class LoadClientsJob extends JobImpl {
|
||||
private final Context mCtx;
|
||||
private final Notifications _notif;
|
||||
private DaemonThread _addressbook;
|
||||
public SAMBridge SAM_BRIDGE;
|
||||
//private BOB _bob;
|
||||
|
||||
/** this is the delay to load (and start) the clients. */
|
||||
@ -57,8 +62,9 @@ class LoadClientsJob extends JobImpl {
|
||||
public String getName() { return "Start Clients"; }
|
||||
|
||||
public void runJob() {
|
||||
Job j = new RunI2PTunnel(getContext());
|
||||
getContext().jobQueue().addJob(j);
|
||||
Job jtunnel = new RunI2PTunnel(getContext());
|
||||
getContext().jobQueue().addJob(jtunnel);
|
||||
|
||||
|
||||
Thread t = new I2PAppThread(new StatSummarizer(), "StatSummarizer", true);
|
||||
t.setPriority(Thread.NORM_PRIORITY - 1);
|
||||
@ -69,7 +75,15 @@ class LoadClientsJob extends JobImpl {
|
||||
//try {
|
||||
// _bob.startup();
|
||||
//} catch (IOException ioe) {}
|
||||
|
||||
boolean useSAM = PreferenceManager.getDefaultSharedPreferences(mCtx).getBoolean("i2pandroid.client.SAM", true);
|
||||
Util.i("SAM API " + useSAM);
|
||||
if (useSAM) {
|
||||
Job jsam = new RunI2PSAM(getContext());
|
||||
getContext().jobQueue().addJob(jsam);
|
||||
Util.i("SAM API started successfully" + useSAM);
|
||||
}else{
|
||||
Util.i("SAM API disabled, not starting "+useSAM);
|
||||
}
|
||||
getContext().addShutdownTask(new ClientShutdownHook());
|
||||
}
|
||||
|
||||
@ -82,12 +96,13 @@ class LoadClientsJob extends JobImpl {
|
||||
public String getName() { return "Start I2P Tunnel"; }
|
||||
|
||||
public void runJob() {
|
||||
while (!getContext().router().isRunning()) {
|
||||
try { Thread.sleep(1000); } catch (InterruptedException ie) { return; }
|
||||
if (!getContext().router().isAlive()) {
|
||||
if (!getContext().router().isRunning()) {
|
||||
if (getContext().router().isAlive()) {
|
||||
requeue(1000);
|
||||
} else {
|
||||
Util.e("Router stopped before i2ptunnel could start");
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
Util.d("Starting i2ptunnel");
|
||||
TunnelControllerGroup tcg = TunnelControllerGroup.getInstance(getContext());
|
||||
@ -112,6 +127,46 @@ class LoadClientsJob extends JobImpl {
|
||||
}
|
||||
}
|
||||
|
||||
private class RunI2PSAM extends JobImpl {
|
||||
|
||||
public RunI2PSAM(RouterContext ctx) {
|
||||
super(ctx);
|
||||
}
|
||||
|
||||
public String getName() { return "Start SAM API"; }
|
||||
|
||||
public void runJob() {
|
||||
if (!getContext().router().isRunning()) {
|
||||
if (getContext().router().isAlive()) {
|
||||
requeue(1000);
|
||||
} else {
|
||||
Util.e("Router stopped before SAM API could start");
|
||||
}
|
||||
return;
|
||||
}
|
||||
Util.d("Starting SAM");
|
||||
try {
|
||||
Util.i("Starting the SAM API");
|
||||
SAM_BRIDGE = new SAMBridge("127.0.0.1",
|
||||
7656,
|
||||
false,
|
||||
SAM_PROPERTIES(),
|
||||
"sam.keys",
|
||||
new File("sam_config"));
|
||||
SAM_BRIDGE.run();
|
||||
} catch (IOException e) {
|
||||
Util.e( e.toString());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public Properties SAM_PROPERTIES() throws IOException {
|
||||
Util.i("Getting the default properties");
|
||||
Properties sam_properties = new Properties();
|
||||
return sam_properties;
|
||||
}
|
||||
}
|
||||
|
||||
private class ClientShutdownHook implements Runnable {
|
||||
public void run() {
|
||||
Util.d("client shutdown hook");
|
||||
@ -120,6 +175,8 @@ class LoadClientsJob extends JobImpl {
|
||||
// NewsFetcher registers its own hook
|
||||
//if (_bob != null)
|
||||
// _bob.shutdown(null);
|
||||
if (SAM_BRIDGE != null)
|
||||
SAM_BRIDGE.shutdown(null);
|
||||
if (_addressbook != null)
|
||||
_addressbook.halt();
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.Message;
|
||||
@ -168,10 +169,18 @@ public class RouterService extends Service {
|
||||
}
|
||||
_handler.removeCallbacks(_updater);
|
||||
_handler.postDelayed(_updater, 50);
|
||||
|
||||
// We need to *not* check if we're restarting on Android greater than Oreo due to
|
||||
// changes in how notifications work and the use of NotificationChannels.
|
||||
if(!restart) {
|
||||
startForeground(1337, _statusBar.getNote());
|
||||
} else {
|
||||
if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
||||
startForeground(1337, _statusBar.getNote());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//return START_STICKY;
|
||||
return START_NOT_STICKY;
|
||||
}
|
||||
|
@ -1,11 +1,15 @@
|
||||
package net.i2p.android.router.service;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.view.Gravity;
|
||||
import android.widget.Toast;
|
||||
|
||||
import net.i2p.android.I2PActivity;
|
||||
import net.i2p.android.router.R;
|
||||
@ -16,6 +20,9 @@ class StatusBar {
|
||||
private final NotificationManager mNotificationManager;
|
||||
private final NotificationCompat.Builder mNotifyBuilder;
|
||||
private Notification mNotif;
|
||||
private final String NOTIFICATION_CHANNEL_ID = "net.i2p.android.STARTUP_STATE_CHANNEL";
|
||||
private final String channelName = "I2P Router Service";
|
||||
NotificationChannel mNotificationChannel;
|
||||
|
||||
private static final int ID = 1337;
|
||||
|
||||
@ -28,25 +35,33 @@ class StatusBar {
|
||||
|
||||
StatusBar(Context ctx) {
|
||||
mCtx = ctx;
|
||||
mNotificationManager = (NotificationManager) ctx.getSystemService(
|
||||
mNotificationManager = (NotificationManager) mCtx.getSystemService(
|
||||
Context.NOTIFICATION_SERVICE);
|
||||
assert mNotificationManager != null;
|
||||
|
||||
Thread.currentThread().setUncaughtExceptionHandler(
|
||||
new CrashHandler(mNotificationManager));
|
||||
|
||||
int icon = ICON_STARTING;
|
||||
// won't be shown if replace() is called
|
||||
String text = ctx.getString(R.string.notification_status_starting);
|
||||
String text = mCtx.getString(R.string.notification_status_starting);
|
||||
|
||||
mNotifyBuilder = new NotificationCompat.Builder(ctx)
|
||||
.setContentText(text)
|
||||
.setSmallIcon(icon)
|
||||
.setColor(mCtx.getResources().getColor(R.color.primary_light))
|
||||
.setOngoing(true)
|
||||
.setOnlyAlertOnce(true);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
mNotifyBuilder = new NotificationCompat.Builder(mCtx);
|
||||
} else {
|
||||
mNotifyBuilder = new NotificationCompat.Builder(mCtx, NOTIFICATION_CHANNEL_ID);
|
||||
}
|
||||
|
||||
Intent intent = new Intent(ctx, I2PActivity.class);
|
||||
mNotifyBuilder.setContentText(text);
|
||||
mNotifyBuilder.setSmallIcon(icon);
|
||||
mNotifyBuilder.setColor(mCtx.getResources().getColor(R.color.primary_light));
|
||||
mNotifyBuilder.setOngoing(true);
|
||||
mNotifyBuilder.setPriority(NotificationManager.IMPORTANCE_LOW);
|
||||
mNotifyBuilder.setCategory(Notification.CATEGORY_SERVICE);
|
||||
|
||||
Intent intent = new Intent(mCtx, I2PActivity.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
PendingIntent pi = PendingIntent.getActivity(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent pi = PendingIntent.getActivity(mCtx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
mNotifyBuilder.setContentIntent(pi);
|
||||
}
|
||||
|
||||
@ -74,6 +89,12 @@ class StatusBar {
|
||||
public void update(String title, String text) {
|
||||
mNotifyBuilder.setContentTitle(title)
|
||||
.setContentText(text);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
mNotificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_LOW);
|
||||
mNotificationManager.createNotificationChannel(mNotificationChannel);
|
||||
mNotificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
|
||||
mNotifyBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
|
||||
}
|
||||
mNotif = mNotifyBuilder.build();
|
||||
mNotificationManager.notify(ID, mNotif);
|
||||
}
|
||||
|
@ -2,16 +2,20 @@ package net.i2p.android.router.util;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
|
||||
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
|
||||
public class Notifications {
|
||||
private final Context mCtx;
|
||||
private final NotificationManager mNotificationManager;
|
||||
|
||||
|
||||
|
||||
public static final int ICON = R.drawable.ic_stat_router_active;
|
||||
|
||||
public Notifications(Context ctx) {
|
||||
@ -25,13 +29,26 @@ public class Notifications {
|
||||
}
|
||||
|
||||
public void notify(String title, String text, Class<?> c) {
|
||||
NotificationCompat.Builder b =
|
||||
new NotificationCompat.Builder(mCtx)
|
||||
.setContentTitle(title)
|
||||
.setContentText(text)
|
||||
.setSmallIcon(ICON)
|
||||
.setColor(mCtx.getResources().getColor(R.color.primary_light))
|
||||
.setAutoCancel(true);
|
||||
notify(title, text, "", c);
|
||||
}
|
||||
|
||||
public void notify(String title, String text, String channel, Class<?> c) {
|
||||
NotificationCompat.Builder b;
|
||||
if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
||||
b = new NotificationCompat.Builder(mCtx);
|
||||
} else {
|
||||
if (channel.equals("")){
|
||||
b = new NotificationCompat.Builder(mCtx);
|
||||
} else {
|
||||
b = new NotificationCompat.Builder(mCtx, channel);
|
||||
}
|
||||
}
|
||||
|
||||
b.setContentTitle(title);
|
||||
b.setContentText(text);
|
||||
b.setSmallIcon(ICON);
|
||||
b.setColor(mCtx.getResources().getColor(R.color.primary_light));
|
||||
b.setAutoCancel(true);
|
||||
|
||||
if (c != null) {
|
||||
Intent intent = new Intent(mCtx, c);
|
||||
|
@ -0,0 +1,13 @@
|
||||
<html>
|
||||
<head></head>
|
||||
<body>
|
||||
<h2>How to configure IceRaven for Android:</h2>
|
||||
<h3>Configuration via Webextension</h3>
|
||||
<ol>
|
||||
<li>Open IceRaven and click the main menu. Scroll to the top, and tap the "Add-Ons" submenu.</li>
|
||||
<li>Tap on the "Add-Ons Manager" option.</li>
|
||||
<li>Find the "I2P Proxy for Android and Other" extension in the Add-Ons collection and tap on the <code>+</code> symbol</li>
|
||||
<li>You can now browse I2P Sites!</li>
|
||||
</ol>
|
||||
</body>
|
||||
</html>
|
@ -24,8 +24,7 @@
|
||||
<li>Tap "Update"</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
<h3>Experimental Rootless Configuration via Webextension</h3>
|
||||
<strong><p>Use at your own risk</p></strong>
|
||||
<h3>Rootless Configuration via Webextension</h3>
|
||||
<ol>
|
||||
<li>Open this link in GNU IceCat and get the WebExtension from <a href="https://github.com/eyedeekay/i2psetproxy.js/releases">Github</a></li>
|
||||
<li>Click through the "Blocked Extension" warning</li>
|
||||
|
@ -24,8 +24,7 @@
|
||||
<li>Tap "Update"</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
<h3>Experimental Rootless Configuration via Webextension</h3>
|
||||
<strong><p>Use at your own risk</p></strong>
|
||||
<h3>Rootless Configuration via Webextension</h3>
|
||||
<ol>
|
||||
<li>Open this link in Fennec and get the WebExtension from <a href="https://github.com/eyedeekay/i2psetproxy.js/releases">Github</a></li>
|
||||
<li>Click through the "Blocked Extension" warning</li>
|
||||
|
@ -24,8 +24,7 @@
|
||||
<li>Tap "Update"</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
<h3>Experimental Rootless Configuration via Webextension</h3>
|
||||
<strong><p>Use at your own risk</p></strong>
|
||||
<h3>Rootless Configuration via Webextension</h3>
|
||||
<ol>
|
||||
<li>Open this link in Firefox and get the WebExtension from <a href="https://github.com/eyedeekay/i2psetproxy.js/releases">Github</a></li>
|
||||
<li>Click through the "Blocked Extension" warning</li>
|
||||
|
@ -8,7 +8,7 @@ tunnel.0.type=httpclient
|
||||
tunnel.0.sharedClient=false
|
||||
tunnel.0.interface=127.0.0.1
|
||||
tunnel.0.listenPort=4444
|
||||
tunnel.0.proxyList=false.i2p,blue.proxynet.i2p
|
||||
tunnel.0.proxyList=false.i2p
|
||||
tunnel.0.i2cpHost=127.0.0.1
|
||||
tunnel.0.i2cpPort=7654
|
||||
tunnel.0.option.inbound.nickname=I2P HTTP Proxy
|
||||
@ -18,7 +18,7 @@ tunnel.0.option.i2cp.reduceIdleTime=600000
|
||||
tunnel.0.option.i2cp.reduceOnIdle=true
|
||||
tunnel.0.option.i2cp.reduceQuantity=1
|
||||
tunnel.0.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.0.option.i2ptunnel.httpclient.SSLOutproxies=false.i2p,blue.proxynet.i2p
|
||||
tunnel.0.option.i2ptunnel.httpclient.SSLOutproxies=false.i2p
|
||||
tunnel.0.option.inbound.length=2
|
||||
tunnel.0.option.inbound.lengthVariance=0
|
||||
tunnel.0.option.outbound.length=2
|
||||
@ -33,7 +33,7 @@ tunnel.1.type=ircclient
|
||||
tunnel.1.sharedClient=true
|
||||
tunnel.1.interface=127.0.0.1
|
||||
tunnel.1.listenPort=6668
|
||||
tunnel.1.targetDestination=irc.dg.i2p:6667,irc.postman.i2p:6667,irc.echelon.i2p:6667
|
||||
tunnel.1.targetDestination=irc.postman.i2p:6667,irc.echelon.i2p:6667
|
||||
tunnel.1.i2cpHost=127.0.0.1
|
||||
tunnel.1.i2cpPort=7654
|
||||
tunnel.1.option.inbound.nickname=shared clients
|
||||
@ -100,3 +100,56 @@ tunnel.3.option.outbound.length=2
|
||||
tunnel.3.option.outbound.lengthVariance=0
|
||||
tunnel.3.option.outbound.priority=15
|
||||
tunnel.3.startOnLoad=true
|
||||
|
||||
# I2P Git Repositories SSH Access
|
||||
tunnel.6.description=I2P Git Repositories SSH Access
|
||||
tunnel.6.interface=127.0.0.1
|
||||
tunnel.6.listenPort=7670
|
||||
tunnel.6.name=gitssh.idk.i2p
|
||||
tunnel.6.option.i2cp.closeIdleTime=1800000
|
||||
tunnel.6.option.i2cp.closeOnIdle=false
|
||||
tunnel.6.option.i2cp.delayOpen=true
|
||||
tunnel.6.option.i2cp.destination.sigType=7
|
||||
tunnel.6.option.i2cp.newDestOnResume=false
|
||||
tunnel.6.option.i2cp.reduceIdleTime=1200000
|
||||
tunnel.6.option.i2cp.reduceOnIdle=true
|
||||
tunnel.6.option.i2cp.reduceQuantity=1
|
||||
tunnel.6.option.inbound.backupQuantity=1
|
||||
tunnel.6.option.inbound.length=3
|
||||
tunnel.6.option.inbound.nickname=gitssh.idk.i2p
|
||||
tunnel.6.option.inbound.quantity=3
|
||||
tunnel.6.option.outbound.backupQuantity=1
|
||||
tunnel.6.option.outbound.length=3
|
||||
tunnel.6.option.outbound.nickname=gitssh.idk.i2p
|
||||
tunnel.6.option.outbound.quantity=3
|
||||
tunnel.6.sharedClient=false
|
||||
tunnel.6.startOnLoad=false
|
||||
tunnel.6.targetDestination=gitssh.idk.i2p
|
||||
tunnel.6.type=client
|
||||
|
||||
# I2P Git Repositories HTTP Access(Android only)
|
||||
# Disabled by default, useful for Android gitlab clients like labcoat
|
||||
tunnel.7.description=I2P Git Repositories HTTP Access(Android Only)
|
||||
tunnel.7.interface=127.0.0.1
|
||||
tunnel.7.listenPort=7671
|
||||
tunnel.7.name=git.idk.i2p
|
||||
tunnel.7.option.i2cp.closeIdleTime=1800000
|
||||
tunnel.7.option.i2cp.closeOnIdle=false
|
||||
tunnel.7.option.i2cp.delayOpen=true
|
||||
tunnel.7.option.i2cp.destination.sigType=7
|
||||
tunnel.7.option.i2cp.newDestOnResume=false
|
||||
tunnel.7.option.i2cp.reduceIdleTime=1200000
|
||||
tunnel.7.option.i2cp.reduceOnIdle=true
|
||||
tunnel.7.option.i2cp.reduceQuantity=1
|
||||
tunnel.7.option.inbound.backupQuantity=1
|
||||
tunnel.7.option.inbound.length=3
|
||||
tunnel.7.option.inbound.nickname=git.idk.i2p
|
||||
tunnel.7.option.inbound.quantity=3
|
||||
tunnel.7.option.outbound.backupQuantity=1
|
||||
tunnel.7.option.outbound.length=3
|
||||
tunnel.7.option.outbound.nickname=git.idk.i2p
|
||||
tunnel.7.option.outbound.quantity=3
|
||||
tunnel.7.sharedClient=false
|
||||
tunnel.7.startOnLoad=false
|
||||
tunnel.7.targetDestination=ssh.idk.i2p
|
||||
tunnel.7.type=client
|
||||
|
@ -53,6 +53,10 @@ i2np.bandwidth.outboundKBytesPerSecond=50
|
||||
i2np.ntcp.enable=true
|
||||
i2np.ntcp.maxConnections=32
|
||||
#
|
||||
# NTCP2
|
||||
#
|
||||
i2np.ntcp2.enable=true
|
||||
#
|
||||
# UDP
|
||||
#
|
||||
i2np.udp.enable=true
|
||||
|
@ -1,3 +1,2 @@
|
||||
http://i2p-projekt.i2p/hosts.txt
|
||||
http://i2host.i2p/cgi-bin/i2hostetag
|
||||
http://stats.i2p/cgi-bin/newhosts.txt
|
||||
|
@ -36,9 +36,8 @@ services. You can also access the normal web anonymously via I2P's built-in web
|
||||
proxy (outproxy). <a href="https://geti2p.net/en/about/browser-config"
|
||||
target="_blank">Configure your browser</a> to use the HTTP proxy at
|
||||
<code>127.0.0.1 port 4444</code>, then browse to an eepsite or a normal,
|
||||
unencrypted <code>http://</code> address. For a pre-configured browser, you may
|
||||
wish to try <a href="http://echelon.i2p/i2pfox/">I2PFox</a>, a custom build of
|
||||
Firefox security hardened and tailored especially for I2P. If you wish to
|
||||
unencrypted <code>http://</code> address.
|
||||
If you wish to
|
||||
disable or change outproxy access to the normal internet, remove or modify the
|
||||
outproxy entry for <code>false.i2p</code> under the <i>Outproxies</i> option in
|
||||
the <a href="/i2ptunnel/edit?tunnel=0" target="_blank">I2P HTTP Proxy Tunnel
|
||||
@ -80,13 +79,13 @@ target="_blank">geti2p.net</a>. If you want to know
|
||||
more about how I2P works or how you can participate, this is your first port of
|
||||
call!</li>
|
||||
<li class="tidylist"><b>I2P Community Forums</b><br><a
|
||||
href="http://forum.i2p/" target="_blank">forum.i2p</a>: A secure
|
||||
href="http://i2pforum.i2p/" target="_blank">i2pforum.i2p</a>: A secure
|
||||
and anonymous online forum community where developers
|
||||
and users alike discuss problems and ideas relating to I2P and associated
|
||||
topics, and <a href="http://zzz.i2p/" target="_blank">zzz's developer
|
||||
forums</a> for both end users and developers.</li>
|
||||
<li class="tidylist"><b>I2P Anonymous Pastebin</b><br><a
|
||||
href="http://pastethis.i2p/" target="_blank">pastethis.i2p</a>: Secure and
|
||||
href="http://paste.idk.i2p/" target="_blank">paste.idk.i2p</a>: Secure and
|
||||
anonymous paste service allowing anonymous text and text-based code
|
||||
sharing over I2P.</li>
|
||||
<li class="tidylist"><b>Echelon's I2P Resources</b><br><a
|
||||
@ -95,14 +94,6 @@ href="http://echelon.i2p/" target="_blank">echelon.i2p</a>: I2P software
|
||||
including a <a href="http://echelon.i2p/I2Pguide/index.html"
|
||||
target="_blank">beginner's guide</a> and pre-release developer builds of I2P
|
||||
for the adventurous to try.</li>
|
||||
<li class="tidylist"><b>Ugha's Wiki</b><br><a href="http://ugha.i2p/"
|
||||
target="_blank">ugha.i2p</a>: An open wiki that anyone can edit with plenty of
|
||||
information about I2P, help for beginners, additional links into the network,
|
||||
and more.</li>
|
||||
<li class="tidylist"><b>I2P-to-Freenet Proxy</b><br><a
|
||||
href="http://fproxy.tino.i2p/" target="_blank">fproxy.tino.i2p</a>:
|
||||
Peer into the world of the <a href="http://freenetproject.org/"
|
||||
target="_blank">Freenet</a> network with Tino's I2P-to-Freenet proxy.</li>
|
||||
<li class="tidylist"><b>The Planet (on I2P)</b><br><a
|
||||
href="http://planet.i2p/" target="_blank">planet.i2p</a>: An RSS aggregator
|
||||
site that takes news and events from around I2P and publishes them all in one
|
||||
@ -149,23 +140,19 @@ discussion forum</a>,
|
||||
<a href="irc://127.0.0.1:6668/i2p-help">#i2p-help</a>, <a
|
||||
href="irc://127.0.0.1:6668/i2p">#i2p</a> or <a
|
||||
href="irc://127.0.0.1:6668/i2p-chat">#i2p-chat</a> on I2P's internal IRC
|
||||
network (<code>irc.postman.i2p</code> or <code>irc.freshcoffee.i2p</code>).
|
||||
network (<code>irc.postman.i2p</code> or <code>irc.echelon.i2p</code>).
|
||||
These channels are also available outside of I2P's encrypted, anonymous network
|
||||
via <a href="irc://irc.freenode.net/i2p">Freenode IRC</a>.
|
||||
</li>
|
||||
|
||||
<li class="tidylist"><b>Reporting Bugs</b><br>If you'd like to report a bug,
|
||||
please file a ticket on <a href="http://trac.i2p2.i2p/"
|
||||
target="_blank">trac.i2p2.i2p</a>. For developer-related discussions, please
|
||||
please file a ticket on <a href="http://git.idk.i2p/"
|
||||
target="_blank">git.idk.i2p</a>. For developer-related discussions, please
|
||||
visit <a href="http://zzz.i2p/" target="_blank">zzz's developer forums</a> or
|
||||
come and visit the <a href="irc://127.0.0.1:6668/i2p-dev">developer channel</a>
|
||||
on I2P's IRC network. Developers can browse source at <a
|
||||
href="http://stats.i2p/cgi-bin/viewmtn/" target="_blank">zzz's mtn repository
|
||||
viewer</a>, <a href="http://i2host.i2p/cgi-bin/view/branch/changes/i2p.i2p"
|
||||
target="_blank">Sponge's instance</a>, or via <a
|
||||
href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. We
|
||||
primarily use <a href="http://i2p-projekt.i2p/monotone.html"
|
||||
target="_blank">monotone</a> to manage our source code.
|
||||
href="git.idk.i2p/i2p-hackers/i2p.i2p/-/commits/master" target="_blank">git.idk.i2p</a> or
|
||||
<a href="https://github.com/i2p/i2p.i2p" target="_blank">GitHub</a>.
|
||||
</li>
|
||||
|
||||
<li class="tidylist"><b>Get Involved!</b><br>I2P is developed and maintained
|
||||
@ -188,6 +175,6 @@ page</a> on the website.
|
||||
</ul>
|
||||
|
||||
<div class="topness"><a href="#top">[Return to Top]</a></div>
|
||||
<div class="footnote"><hr>Document updated: June 2011</div>
|
||||
<div class="footnote"><hr>Document updated: May 2021</div>
|
||||
</div>
|
||||
</body></html>
|
||||
|
@ -25,7 +25,7 @@
|
||||
<string name="button_router_graceful">I2P se fermera dans %s</string>
|
||||
<string name="button_shutdown_now">Appuyer longuement pour arrêter maintenant</string>
|
||||
<string name="button_cancel_graceful">Appuyer longuement pour annuler la fermeture</string>
|
||||
<string name="no_internet">Aucune connexion Internet n’est disponible</string>
|
||||
<string name="no_internet">Aucune connexion à Internet n’est disponible</string>
|
||||
<string name="hidden">caché</string>
|
||||
<string name="testing">en test</string>
|
||||
<string name="firewalled">derrière un pare-feu</string>
|
||||
@ -54,7 +54,7 @@
|
||||
<string name="download">Téléchargement</string>
|
||||
<string name="upload">Téléversement</string>
|
||||
<string name="configure_browser_title">Configurer le navigateur ?</string>
|
||||
<string name="configure_browser_for_i2p">Souhaitez-vous configurer un navigateur pour visualiser les sites I2P ? (Vous pouvez aussi le faire plus tard grâce au menu d’aide.)</string>
|
||||
<string name="configure_browser_for_i2p">Voulez-vous configurer un navigateur pour visualiser les sites I2P ? (Vous pouvez aussi le faire plus tard grâce au menu d’aide.)</string>
|
||||
<string name="configure_no_doze_title">Gérer les optimisations de la pile ?</string>
|
||||
<string name="configure_no_doze">I2P fonctionne mieux s’il fonctionne en permanence. Pour empêcher qu’Android ferme I2P quand il essaie d’économiser l’énergie, vous pouvez ajouter I2P à la liste d’exception de la pile. La fiabilité de l’appli s’en trouvera grandement améliorée.\n\nGarder I2P en fonction en arrière-plan ? (recommandé)</string>
|
||||
<string name="first_start_title">Félicitations pour votre installation d’I2P !</string>
|
||||
@ -82,11 +82,11 @@
|
||||
<string name="view_news">Toucher pour voir les dernières nouvelles d’I2P</string>
|
||||
<string name="router_not_running">Le routeur ne fonctionne pas.</string>
|
||||
<string name="router_shutting_down">Le routeur s’éteint.</string>
|
||||
<string name="stats_not_ready">Le gestionnaire de statistiques n’est pas encore prêt. Ressayer ultérieurement.</string>
|
||||
<string name="stats_not_ready">Le gestionnaire de statistiques n’est pas encore prêt. Réessayer plus tard.</string>
|
||||
<string name="select_an_address">Sélectionner une adresse.</string>
|
||||
<string name="no_graphs_configured">Aucun graphique n’a été configuré. Vous pouvez choisir les statistiques à graphiquer dans le menu des paramètres. Tout changement prendra effet après 60 secondes.</string>
|
||||
<string name="configure_graphs">Configurer les graphiques</string>
|
||||
<string name="graphs_not_ready">Les graphiques ne sont pas encore prêts. Ressayer ultérieurement.</string>
|
||||
<string name="graphs_not_ready">Les graphiques ne sont pas encore prêts. Réessayer plus tard.</string>
|
||||
<string name="statistics">Statistiques</string>
|
||||
<string name="routers">Routeurs</string>
|
||||
<string name="leasesets">Jeux de baux</string>
|
||||
@ -171,8 +171,8 @@
|
||||
<string name="about_project">Page d’accueil du projet :</string>
|
||||
<string name="about_bugs">Bogues et assistance :</string>
|
||||
<string name="about_helpwanted">Aide recherchée !</string>
|
||||
<string name="about_volunteer">Souhaitez-vous aider à améliorer l’appli ? Portez-vous volontaire sur le forum Android :</string>
|
||||
<string name="about_donate">Souhaitez-vous faire un don en argent ou en bitcoins pour acheter plus d’appareils Android pour le développement et les tests ? Rendez-vous sur :</string>
|
||||
<string name="about_volunteer">Voulez-vous aider à améliorer l’appli ? Portez-vous volontaire sur le forum Android :</string>
|
||||
<string name="about_donate">Voulez-vous faire un don en argent ou en bitcoins pour acheter plus d’appareils Android pour le développement et les tests ? Rendez-vous sur :</string>
|
||||
<string name="menu_help">Aide</string>
|
||||
<string name="general">Général</string>
|
||||
<string name="label_router">Adresses publiques</string>
|
||||
@ -201,7 +201,7 @@
|
||||
<string name="i2ptunnel_type_streamrserver">Serveur Streamr</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">Bidir HTTP</string>
|
||||
<string name="install_recommended_app">Installer l’appli recommandée ?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Vous devez installer une appli pour utiliser ce tunnel. Souhaitez-vous installer l’appli recommandée ?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Vous devez installer une appli pour utiliser ce tunnel. Voulez-vous installer l’appli recommandée ?</string>
|
||||
<string name="i2ptunnel_not_initialized">Les tunnels ne sont pas encore initialisés, veuillez recharger dans deux minutes.</string>
|
||||
<string name="no_configured_client_tunnels">Aucun tunnel client n’est configuré.</string>
|
||||
<string name="no_configured_server_tunnels">Aucun tunnel serveur n’est configuré.</string>
|
||||
|
@ -55,6 +55,8 @@
|
||||
<string name="upload">Wysyłanie</string>
|
||||
<string name="configure_browser_title">Konfigurować przeglądarkę?</string>
|
||||
<string name="configure_browser_for_i2p">Czy chciałbyś skonfigurować przeglądarkę, aby przeglądać strony I2P? (Możesz to zrobić później w wybierająć pomoc z menu.)</string>
|
||||
<string name="configure_no_doze_title">Czy wyłączyć optymalizację baterii?</string>
|
||||
<string name="configure_no_doze">Aplikacja I2P działa najlepiej gdy działa bez przerwy. Aby system Android nie usypiał aplikacji I2P w celu oszczędzania energii, należy dodać ją do listy wyjątków. Znacząco większy to niezawodność aplikacji.\n\nCzy pozwolić aplikacji I2P działać w tle? (zalecane)</string>
|
||||
<string name="first_start_title">Gratulacje, zainstalowałeś I2P!</string>
|
||||
<string name="first_start_welcome"><b>Witamy w I2P!</b> Proszę <b>bądz cierpliwy</b> bo I2P właśnie się uruchamia i szuka peerów.</string>
|
||||
<string name="first_start_read">W międzyczasie, prosimy o zapoznanie się z notatkami tego wydania oraz stroną powitalną.</string>
|
||||
@ -145,6 +147,7 @@
|
||||
<string name="settings_label_transports">Transporty</string>
|
||||
<string name="settings_label_maxConns">Maksymalna liczba połączeń</string>
|
||||
<string name="settings_label_i2cp">Interfejs I2CP</string>
|
||||
<string name="settings_desc_i2cp">Zezwól aplikacjom stron trzecich na tworzenie tuneli (wymaga restartu węzła)</string>
|
||||
<string name="settings_label_exploratory_pool">Pole rozpoznawcze</string>
|
||||
<string name="settings_desc_exploratory_pool">Parametry tuneli</string>
|
||||
<string name="settings_label_expl_inbound">Tunele przychodzące</string>
|
||||
|
@ -47,22 +47,22 @@
|
||||
<string name="active_peers">Активные узлы</string>
|
||||
<string name="known_peers">Известные узлы</string>
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<string name="char_client_tunnel">K</string>
|
||||
<string name="char_client_tunnel">C</string>
|
||||
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
|
||||
<string name="char_server_tunnel">С</string>
|
||||
<string name="char_server_tunnel">S</string>
|
||||
<string name="no_tunnels_running">Нет ни одного запущенного туннеля.</string>
|
||||
<string name="download">Получено</string>
|
||||
<string name="upload">Передано</string>
|
||||
<string name="configure_browser_title">Настроить браузер?</string>
|
||||
<string name="configure_browser_for_i2p">Настроить браузер для просмотра I2P сайтов? (Вы сможете сделать это позже из меню \"Справка\")</string>
|
||||
<string name="configure_no_doze_title">Управлять оптимизацией энергосбережения?</string>
|
||||
<string name="configure_no_doze">I2P работает лучше всего когда постоянно запущен. Для предотвращения закрытия I2P системой вы можете добавить его в список исключения оптимизации. Это существенно увеличит надёжность приложения. Оставить I2P работать в фоне? (рекомендуется)</string>
|
||||
<string name="configure_no_doze">I2P работает лучше всего, когда постоянно запущен. Для предотвращения закрытия I2P системой вы можете добавить его в список исключений оптимизации. Это существенно увеличит надёжность приложения. Оставить I2P работать в фоне? (рекомендуется)</string>
|
||||
<string name="first_start_title">Поздравляем с установкой I2P!</string>
|
||||
<string name="first_start_welcome"><b>Добро пожаловать в I2P!</b> Пожалуйста, <b>дождитесь</b> пока I2P загрузится и найдет узлы.</string>
|
||||
<string name="first_start_read">Пока вы ждете, пожалуйста, прочтите информацию о релизе и страницу приветствия.</string>
|
||||
<string name="first_start_faq">Как только у вас появятся клиентские туннели, пожалуйста, <b>посмотрите</b> раздел FAQ:</string>
|
||||
<string name="first_start_faq_nonanon">Или используйте эту не анонимную ссылку, если вы не хотите ждать создания туннелей:</string>
|
||||
<string name="first_start_irc">Настройте свой клиент IRC на <b>localhost:6668</b> и скажите нам привет:</string>
|
||||
<string name="first_start_faq_nonanon">Или используйте эту неанонимную ссылку, если вы не хотите ждать создания туннелей:</string>
|
||||
<string name="first_start_irc">Настройте свой клиент IRC на <b>localhost:6668</b> и поздоровайтесь с нами:</string>
|
||||
<string name="action_search">Поиск</string>
|
||||
<string name="action_add">Добавить</string>
|
||||
<string name="action_edit">Изменить</string>
|
||||
@ -137,10 +137,10 @@
|
||||
<string name="settings_dialog_sharePercent">Процент пропускной способности на раздачу</string>
|
||||
<string name="settings_desc_upnp">Автооткрытие портов брандмауэра</string>
|
||||
<string name="settings_label_logging">Журналирование</string>
|
||||
<string name="settings_label_default_log_level">Уровень журналирования по-умолчанию</string>
|
||||
<string name="settings_label_default_log_level">Уровень журналирования по умолчанию</string>
|
||||
<string name="settings_label_appearance">Внешний вид</string>
|
||||
<string name="settings_label_language">Язык</string>
|
||||
<string name="settings_default">По-умолчанию</string>
|
||||
<string name="settings_default">По умолчанию</string>
|
||||
<string name="settings_label_advanced">Расширенные</string>
|
||||
<string name="settings_label_showStats">Статистика маршрутизатора</string>
|
||||
<string name="settings_summ_showStats">Показать расширенную статистику в главной консоли</string>
|
||||
@ -171,8 +171,8 @@
|
||||
<string name="about_project">Сайт проекта:</string>
|
||||
<string name="about_bugs">Ошибки и поддержка:</string>
|
||||
<string name="about_helpwanted">Требуется помощь!</string>
|
||||
<string name="about_volunteer">Хотите помочь улучшить приложение? Добровольцы на Android форуме:</string>
|
||||
<string name="about_donate">Хотите пожертвовать деньги или bitcoins на покупку дополнительных Android устройств для разработчиков и тестировщиков? Зайдите:</string>
|
||||
<string name="about_volunteer">Хотите помочь улучшить приложение? Добровольцы на Android-форуме:</string>
|
||||
<string name="about_donate">Хотите пожертвовать деньги или bitcoins на покупку дополнительных Android-устройств для разработчиков и тестировщиков? Зайдите:</string>
|
||||
<string name="menu_help">Справка</string>
|
||||
<string name="general">Общие</string>
|
||||
<string name="label_router">Публичные адреса</string>
|
||||
@ -187,7 +187,7 @@
|
||||
<string name="nsu_iae_cannot_start_with">Имя узла не может начинаться с \"%s\"</string>
|
||||
<string name="nsu_iae_cannot_end_with">Имя узла не может заканчиваться \"%s\"</string>
|
||||
<string name="nsu_iae_cannot_contain">Имя узла не может содержать \"%s\"</string>
|
||||
<string name="nsu_iae_requires_conversion">Имя узла \"%s\" необходимо преобразовать в ASCII, но соответствующая библиотека не доступна в этой версии Android</string>
|
||||
<string name="nsu_iae_requires_conversion">Имя узла \"%s\" необходимо преобразовать в ASCII, но соответствующая библиотека недоступна в этой версии Android</string>
|
||||
<string name="i2ptunnel_type_client">Стандартный клиент</string>
|
||||
<string name="i2ptunnel_type_httpclient">HTTP клиент</string>
|
||||
<string name="i2ptunnel_type_ircclient">IRC клиент</string>
|
||||
@ -202,7 +202,7 @@
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidir</string>
|
||||
<string name="install_recommended_app">Установить рекомендованное приложение?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Требуется установить приложение для использования этого туннеля. Хотите установить рекомендованное приложение?</string>
|
||||
<string name="i2ptunnel_not_initialized">Туннели еще не инициализированы, пожалуйста, обновите через пару минут</string>
|
||||
<string name="i2ptunnel_not_initialized">Туннели еще не инициализированы, пожалуйста, обновите через пару минут.</string>
|
||||
<string name="no_configured_client_tunnels">Нет настроенных клиентских туннелей.</string>
|
||||
<string name="no_configured_server_tunnels">Нет настроенных серверных туннелей.</string>
|
||||
<string name="i2ptunnel_new_tunnel">Создать туннель</string>
|
||||
@ -244,7 +244,7 @@
|
||||
<string name="i2ptunnel_wizard_submit_confirm_button">Создать туннель</string>
|
||||
<string name="i2ptunnel_view_target">Цель</string>
|
||||
<string name="i2ptunnel_view_access_point">Точка доступа</string>
|
||||
<string name="i2ptunnel_view_autostart">Авто-запуск</string>
|
||||
<string name="i2ptunnel_view_autostart">Автозапуск</string>
|
||||
<string name="address_copied_to_clipboard">Адрес скопирован в буфер обмена</string>
|
||||
<string name="edit_tunnel">Изменить туннель</string>
|
||||
<string name="name">Имя</string>
|
||||
@ -275,7 +275,7 @@
|
||||
<string name="tunnel_summ_use_ssl">Использовать SSL для подключения к цели</string>
|
||||
<string name="tunnel_parameters">Параметры туннеля</string>
|
||||
<string name="profile">Профиль</string>
|
||||
<string name="profile_bulk">Массовое соединение (для загрузок/вебсайтов/P2P)</string>
|
||||
<string name="profile_bulk">Массовое соединение (для загрузок/веб-сайтов/P2P)</string>
|
||||
<string name="profile_interactive">Интерактивное соединение</string>
|
||||
<string name="delay_connect">Задержка подключения</string>
|
||||
<string name="tunnel_summ_delay_connect">Включить для запроса/ответа соединений</string>
|
||||
|
@ -56,7 +56,9 @@ Läs utgåvenoteringar och licens-information.</string>
|
||||
<string name="upload">Ladda upp</string>
|
||||
<string name="configure_browser_title">Konfigurera webbläsaren?</string>
|
||||
<string name="configure_browser_for_i2p">Vill du konfigurera en browser för att se på I2P-sidor? (Du kan också göra detta senare från hjälpmenyn.)</string>
|
||||
<string name="first_start_title">Gratulerar till din I2P installation!</string>
|
||||
<string name="configure_no_doze_title">Hantera batterioptimeringar?</string>
|
||||
<string name="configure_no_doze">I2P fungerar bäst om den fortsätter att fungera. För att förhindra att Android stänger I2P när du försöker spara ström kan du lägga till den i listan över undantag från batterier. Detta kommer att förbättra applikationens tillförlitlighet avsevärt.\n\nHålla I2P igång i bakgrunden? (rekommenderad)</string>
|
||||
<string name="first_start_title">Gratulerar till din I2P-installation!</string>
|
||||
<string name="first_start_welcome"><b>Välkommen till I2P!</b> Vänligen <b>ha tålamod</b> medan I2P startar och letar upp noder.</string>
|
||||
<string name="first_start_read">Medan du väntar, vänligen läs utgåvans meddelanden och välkomstsidan.</string>
|
||||
<string name="first_start_faq">När du har fått klienttunnlar, vänligen <b>kolla</b> våra vanliga frågor:</string>
|
||||
@ -146,6 +148,7 @@ Läs utgåvenoteringar och licens-information.</string>
|
||||
<string name="settings_label_transports">Transporter</string>
|
||||
<string name="settings_label_maxConns">Max anslutningar</string>
|
||||
<string name="settings_label_i2cp">I2CP interfrace</string>
|
||||
<string name="settings_desc_i2cp">Tillåt tredjepartsappar att skapa tunnlar (kräver omstart av routern)</string>
|
||||
<string name="settings_label_exploratory_pool">Utforskande pool</string>
|
||||
<string name="settings_desc_exploratory_pool">Tunnelparametrar</string>
|
||||
<string name="settings_label_expl_inbound">Inåtgående tunnlar</string>
|
||||
@ -173,7 +176,7 @@ Läs utgåvenoteringar och licens-information.</string>
|
||||
<string name="about_donate">Vill du donera pengar eller bitcoin för inköp av fler Androidenheter till utveckling och testning? Gå till:</string>
|
||||
<string name="menu_help">Hjälp</string>
|
||||
<string name="general">Generell</string>
|
||||
<string name="label_router">Offentliga adresser</string>
|
||||
<string name="label_router">Publika adresser</string>
|
||||
<string name="label_private">Privata adresser</string>
|
||||
<string name="addressbook_is_empty">Adressboken är tom</string>
|
||||
<string name="addressbook_search_header">%s hittade</string>
|
||||
@ -210,6 +213,7 @@ Läs utgåvenoteringar och licens-information.</string>
|
||||
<string name="i2ptunnel_msg_tunnel_stopping">Stannar tunnel</string>
|
||||
<string name="i2ptunnel_delete_confirm_message">Radera tunnel?</string>
|
||||
<string name="i2ptunnel_delete_confirm_button">Radera tunnel</string>
|
||||
<string name="i2ptunnel_no_tunnel_details">Det gick inte att läsa in detaljer i tunneln</string>
|
||||
<string name="i2ptunnel_wizard_k_client_server">Klient eller Server</string>
|
||||
<string name="i2ptunnel_wizard_v_client">Klienttunnel</string>
|
||||
<string name="i2ptunnel_wizard_v_server">Servertunnel</string>
|
||||
@ -242,6 +246,7 @@ Läs utgåvenoteringar och licens-information.</string>
|
||||
<string name="i2ptunnel_view_target">Mål</string>
|
||||
<string name="i2ptunnel_view_access_point">Accesspunkt</string>
|
||||
<string name="i2ptunnel_view_autostart">Auto-start</string>
|
||||
<string name="address_copied_to_clipboard">Adressen kopierades till urklipp</string>
|
||||
<string name="edit_tunnel">Redigera tunnel</string>
|
||||
<string name="name">Namn</string>
|
||||
<string name="description">Beskrivning</string>
|
||||
@ -352,5 +357,6 @@ Läs utgåvenoteringar och licens-information.</string>
|
||||
<string name="error_logs_copied_to_clipboard">Error loggar kopierade till urklipp</string>
|
||||
<string name="logs_copied_to_clipboard">Loggar kopierade till urklipp</string>
|
||||
<string name="label_browser_configuration">Browser konfiguration</string>
|
||||
<string name="no_market_app">Ingen marknadsapp hittades. Installera manuellt</string>
|
||||
<string name="unset">Återställ</string>
|
||||
</resources>
|
||||
|
@ -3,11 +3,11 @@
|
||||
<string name="app_name">I2P</string>
|
||||
<string name="desc_i2p_logo">I2P logosu</string>
|
||||
<string name="choose_language">Dil seçin</string>
|
||||
<string name="welcome_new_install">I2P dünyasına hoş geldiniz. Bu uygulama henüz ALPHA geliştirme düzeyindedir ve güçlü bir isimsiz kalma özelliği sağlamamaktadır. Lütfen yayım notlarını ve lisans bilgilerini okuyun.</string>
|
||||
<string name="welcome_new_install">I2P dünyasına hoş geldiniz. Bu uygulama henüz ALPHA geliştirme düzeyindedir ve güçlü bir anonim kalma özelliği sağlamamaktadır. Lütfen yayım notlarını ve lisans bilgilerini okuyun.</string>
|
||||
<string name="welcome_new_version">Yeni sürüm kuruldu. Lütfen yayım notlarını okuyun. Sürüm:</string>
|
||||
<string name="label_tunnels">Tüneller</string>
|
||||
<string name="label_status">Durum</string>
|
||||
<string name="label_console">Konsol</string>
|
||||
<string name="label_console">Pano</string>
|
||||
<string name="label_addresses">Adresler</string>
|
||||
<string name="label_addressbook">Adres Defteri</string>
|
||||
<string name="label_i2ptunnel_client">İstemci tünelleri</string>
|
||||
@ -61,7 +61,7 @@
|
||||
<string name="first_start_welcome"><b>I2P Yazılımına Hoşgeldiniz</b> Lütfen I2P yüklenip eşleri bulana kadar <b>sabırlı olun</b>.</string>
|
||||
<string name="first_start_read">Beklerken, lütfen sürüm notları ve hoş geldiniz sayfalarını okuyun.</string>
|
||||
<string name="first_start_faq">İstemci tünelleri bulunduğunda, lütfen Sık Sorulan Sorular bölümüne <b>bakın</b>:</string>
|
||||
<string name="first_start_faq_nonanon">Ya da tünelleri beklemek istemiyorsanız isimsiz olmayan şu bağlantıyı kullanın:</string>
|
||||
<string name="first_start_faq_nonanon">Ya da tünelleri beklemek istemiyorsanız anonim olmayan şu bağlantıyı kullanın:</string>
|
||||
<string name="first_start_irc">IRC istemcinizi <b>localhost:6668</b> adresine yönlendirip şuradan bize merhaba deyin:</string>
|
||||
<string name="action_search">Arama</string>
|
||||
<string name="action_add">Ekle</string>
|
||||
@ -143,7 +143,7 @@
|
||||
<string name="settings_default">Varsayılan</string>
|
||||
<string name="settings_label_advanced">Gelişmiş</string>
|
||||
<string name="settings_label_showStats">Yöneltici istatistikleri</string>
|
||||
<string name="settings_summ_showStats">Ana konsolda ayrıntılı istatistikler görüntülensin</string>
|
||||
<string name="settings_summ_showStats">Ana panoda ayrıntılı istatistikler görüntülensin</string>
|
||||
<string name="settings_label_transports">Aktarımlar</string>
|
||||
<string name="settings_label_maxConns">En fazla bağlantı</string>
|
||||
<string name="settings_label_i2cp">I2CP Arabirimi</string>
|
||||
@ -153,11 +153,11 @@
|
||||
<string name="settings_label_expl_inbound">Geliş tünelleri</string>
|
||||
<string name="settings_label_expl_outbound">Gidiş tünelleri</string>
|
||||
<string name="settings_label_expl_length">Uzunluk</string>
|
||||
<string name="settings_summ_expl_length">%s sıçrama</string>
|
||||
<string name="settings_desc_expl_length">Kullanılacak sıçrama sayısı</string>
|
||||
<string name="settings_label_expl_lengthVariance">Sıçrama çeşitliliği</string>
|
||||
<string name="settings_summ_expl_length">%s durak</string>
|
||||
<string name="settings_desc_expl_length">Kullanılacak durak sayısı</string>
|
||||
<string name="settings_label_expl_lengthVariance">Durak çeşitliliği</string>
|
||||
<string name="settings_summ_expl_lengthVariance">%s</string>
|
||||
<string name="settings_desc_expl_lengthVariance">Rastgele eklenecek sıçrama sayısı</string>
|
||||
<string name="settings_desc_expl_lengthVariance">Rastgele eklenecek durak sayısı</string>
|
||||
<string name="settings_label_expl_quantity">Sayı</string>
|
||||
<string name="settings_summ_expl_quantity">%s tünel</string>
|
||||
<string name="settings_desc_expl_quantity">Tünel sayısı</string>
|
||||
@ -328,7 +328,7 @@
|
||||
<string name="tunnel_summ_referer">\'Referer\' üstbilgisi geçirilsin</string>
|
||||
<string name="tunnel_summ_accept">\'Accept-*\' üstbilgisi geçirilsin</string>
|
||||
<string name="tunnel_summ_allow_ssl">I2P adreslerinde SSL kullanılabilsin</string>
|
||||
<string name="jump_url_list">Adresi listesine sıçra</string>
|
||||
<string name="jump_url_list">Sıçrama adresi listesi</string>
|
||||
<string name="proxy_auth">Vekil sunucu kimlik doğrulaması</string>
|
||||
<string name="tunnel_summ_proxy_auth">Bu vekil sunucuda oturum açmak için kimlik doğrulaması istensin</string>
|
||||
<string name="username">Kullanıcı Adı</string>
|
||||
|
@ -55,6 +55,7 @@
|
||||
<string name="upload">Вивантажено</string>
|
||||
<string name="configure_browser_title">Налаштувати браузер?</string>
|
||||
<string name="configure_browser_for_i2p">Бажаєте налаштувати браузер для перегляду I2P-сайтів? (Ви також можете зробити це пізніше через меню).</string>
|
||||
<string name="configure_no_doze_title">Керувати оптимізації батареї?</string>
|
||||
<string name="first_start_title">Вітаємо! I2P встановлено.</string>
|
||||
<string name="first_start_welcome"><b>Ласкаво просимо до I2P!</b> Будь ласка, <b>зачекайте,</b> так як I2P запускається і шукає піри.</string>
|
||||
<string name="first_start_read">Поки чекаєте, прочитайте, будь ласка, нотатки до релізу і вітальну сторінку.</string>
|
||||
|
@ -109,9 +109,11 @@
|
||||
</string-array>
|
||||
<string-array name="recommended_browsers">
|
||||
<item>acr.browser.lightning</item>
|
||||
<item>io.github.forkmaintainers.iceraven</item>
|
||||
</string-array>
|
||||
<string-array name="recommended_browser_labels">
|
||||
<item>Lightning</item>
|
||||
<item>IceRaven(With Extension)</item>
|
||||
</string-array>
|
||||
<string-array name="supported_browsers">
|
||||
<item>org.mozilla.firefox</item>
|
||||
|
@ -150,6 +150,9 @@
|
||||
<string name="notification_status_expl">Exploratory tunnels: %1$d/%2$d</string>
|
||||
<string name="notification_status_client">Client tunnels: %1$d/%2$d</string>
|
||||
|
||||
<string name="copied_base32_system_notification_title">Base32 copied to clipboard</string>
|
||||
<string name="copied_base32_system_notification_body">The address of your I2P tunnel has been copied to the clipboard.</string>
|
||||
|
||||
<string name="menu_settings">Settings</string>
|
||||
<string name="settings_enable">Enable</string>
|
||||
<string name="settings_desc_subscriptions">Subscription URLs</string>
|
||||
@ -182,7 +185,9 @@
|
||||
<string name="settings_label_transports">Transports</string>
|
||||
<string name="settings_label_maxConns">Max connections</string>
|
||||
<string name="settings_label_i2cp">I2CP interface</string>
|
||||
<string name="settings_desc_i2cp">Allow third-party apps to create tunnels (requires router restart)</string>
|
||||
<string name="settings_desc_i2cp">Allow third-party apps to create tunnels using I2CP (requires router restart)</string>
|
||||
<string name="settings_label_sam">SAM interface</string>
|
||||
<string name="settings_desc_sam">Allow third-party apps to create tunnels using SAM (requires router restart)</string>
|
||||
<string name="settings_label_exploratory_pool">Exploratory pool</string>
|
||||
<string name="settings_desc_exploratory_pool">Tunnel parameters</string>
|
||||
<string name="settings_label_expl_inbound">Inbound tunnels</string>
|
||||
@ -415,4 +420,5 @@
|
||||
<string name="no_market_app">No market app found, please install manually</string>
|
||||
|
||||
<string name="unset">Unset</string>
|
||||
<string name="running_background">I2P is running in the background</string>
|
||||
</resources>
|
||||
|
@ -23,6 +23,13 @@
|
||||
android:summary="@string/settings_desc_i2cp"
|
||||
/>
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="i2pandroid.client.sam"
|
||||
android:defaultValue="true"
|
||||
android:title="@string/settings_label_sam"
|
||||
android:summary="@string/settings_desc_sam"
|
||||
/>
|
||||
|
||||
<Preference
|
||||
android:key="preference_category_expl_tunnels"
|
||||
android:summary="@string/settings_desc_exploratory_pool"
|
||||
|
@ -408,14 +408,14 @@
|
||||
<target name="copy-i2p-resources" depends="-dirs" >
|
||||
<copy file="LICENSE.txt" tofile="res/raw/license_app_txt" />
|
||||
<copy file="licenses/LICENSE-Apache2.0.txt" tofile="res/raw/license_apache20_txt" />
|
||||
<copy file="${i2pbase}/installer/resources/themes/console/images/i2plogo.png" todir="res/drawable/" />
|
||||
<copy file="${i2pbase}/apps/routerconsole/jsp/themes/console/images/i2plogo.png" todir="res/drawable/" />
|
||||
|
||||
<!-- Static web sources should be in the assets directory. -->
|
||||
<copy file="${i2pbase}/installer/resources/themes/console/images/i2plogo.png" todir="assets/themes/console/images/" />
|
||||
<copy file="${i2pbase}/installer/resources/themes/console/images/outbound.png" todir="assets/themes/console/images/" />
|
||||
<copy file="${i2pbase}/installer/resources/themes/console/images/inbound.png" todir="assets/themes/console/images/" />
|
||||
<copy file="${i2pbase}/installer/resources/themes/console/light/images/header.png" todir="assets/themes/console/light/images/" />
|
||||
<copy file="${i2pbase}/installer/resources/themes/console/light/console.css" todir="assets/themes/console/light/" />
|
||||
<copy file="${i2pbase}/apps/routerconsole/jsp/themes/console/images/i2plogo.png" todir="assets/themes/console/images/" />
|
||||
<copy file="${i2pbase}/apps/routerconsole/jsp/themes/console/images/outbound.png" todir="assets/themes/console/images/" />
|
||||
<copy file="${i2pbase}/apps/routerconsole/jsp/themes/console/images/inbound.png" todir="assets/themes/console/images/" />
|
||||
<copy file="${i2pbase}/apps/routerconsole/jsp/themes/console/light/images/header.png" todir="assets/themes/console/light/images/" />
|
||||
<copy file="${i2pbase}/apps/routerconsole/jsp/themes/console/light/console.css" todir="assets/themes/console/light/" />
|
||||
|
||||
<copy file="${i2pbase}/installer/resources/blocklist.txt" tofile="res/raw/blocklist_txt" />
|
||||
<copy file="${i2pbase}/installer/resources/hosts.txt" tofile="res/raw/hosts_txt" />
|
||||
|
190
etc/debian-jessie-repo.key.asc
Normal file
190
etc/debian-jessie-repo.key.asc
Normal file
@ -0,0 +1,190 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
vVlGf80KiL+jH/ZOwljXH/gsldbwZxM/mTFK7mscsdWp9+/1iQI3BB8BCAAhBQJU
|
||||
c6aAFwyAATCZEb6pZtBhMFMEVxG05f8VsP2CAgcAAAoJEHY40EQrkNAQQt0P/1jW
|
||||
fbtfR0A7WUChOPHWCNZ+rm8PdBpY4FnRS4hbrBHJdVJnMAIZJ2Ys+5Uj9/xzMLYm
|
||||
rK8ObktUBBegrLTzkrS8B1OsvFJE7jSzoIxRZtYVMcsN2ADKj0dz1a9AMaKf8xtn
|
||||
JBTxD6af8leb50FnR8iUV0ZPVD5zG3J49T2DmhkhFwgaU4fVY2Padtmp65CNdH2Y
|
||||
UgPE9nCKU8tMVeVftFWfVBJRkmvwFkPaWy822IqTFkLWpNoSL+DCxDN0WKPbBfD+
|
||||
7vEaKHfAA18MCF5d064FupUn7m61b969Ntie0UwoUjzooW7OIgNH0mpwrVNwQMa0
|
||||
DPdr8zPQRX9mIgg5ZEz6SSi5KKZGK0PkOnx50fiAUwhaQ/WoSsZesmMauOokxzZM
|
||||
Bkzp4QiSWOy3ctcEuAVSjg3Zb1kRkiRSyRZvzL57EET4W5t5d35GuPyF07D5cOsD
|
||||
5EU368ACfIrJtUPRDHjOpV0E29kav65eHmYcGJW59wCnaCOFUVwFoRcLPkcYQCE3
|
||||
XoWoGFOI9yCkYS1LEzyDKLrtrBJZ5rUGTQXA2A9RfXxwrJgnjq+jmRuce5C2eYvH
|
||||
RNMrj9AsHGC23nj45pxLCHiRJO0hWcsnkFgWoEx5I6mcn1sI0FBpI2qc9CJ9/+GK
|
||||
DUbjYoaZYUbT+OFIRqGWLtPE5BakbTL/8QO8JD4UtEZEZWJpYW4gQXJjaGl2ZSBB
|
||||
dXRvbWF0aWMgU2lnbmluZyBLZXkgKDgvamVzc2llKSA8ZnRwbWFzdGVyQGRlYmlh
|
||||
bi5vcmc+iJwEEAECAAYFAlbDd/sACgkQBAuk6zt/gdqmbAP9FuMpB4fHmaGVxQ3K
|
||||
UWNFzAunAK3YwZaQVrvTWBHbraRLZqUpqskwBUo7RX0acV5RZhdqkgjBI4EGbMY1
|
||||
GKW1dk2R2lGJX3j1dbbjxGURHkBdfUi3RrIgTm6Ya+B6I2gkjeJmxcJUbs+PdqxE
|
||||
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
|
||||
=qjte
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
1
etc/docker.local.ndk.properties
Normal file
1
etc/docker.local.ndk.properties
Normal file
@ -0,0 +1 @@
|
||||
ndk.dir=/opt/android-sdk-linux/ndk/
|
1
etc/docker.local.router.properties
Normal file
1
etc/docker.local.router.properties
Normal file
@ -0,0 +1 @@
|
||||
i2psrc=/opt/workspace/i2p.i2p
|
1
etc/docker.local.sdk.properties
Normal file
1
etc/docker.local.sdk.properties
Normal file
@ -0,0 +1 @@
|
||||
sdk.dir=/opt/android-sdk-linux/
|
10
etc/docker.override.properties
Normal file
10
etc/docker.override.properties
Normal file
@ -0,0 +1,10 @@
|
||||
#javac.version=1.7
|
||||
javac.source=1.8
|
||||
javac.version=1.7
|
||||
javac.target=1.7
|
||||
javac.release=8
|
||||
javac.compilerargs=-bootclasspath /opt/packages/openjdk-7-jre/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar:/opt/packages/openjdk-7-jre/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/jce.jar
|
||||
build.built-by=idk
|
||||
junit.home=/usr/share/java
|
||||
hamcrest.home=/usr/share/java
|
||||
mockito.home=/usr/share/java
|
4
etc/docker.signing.example.properties
Normal file
4
etc/docker.signing.example.properties
Normal file
@ -0,0 +1,4 @@
|
||||
STORE_FILE=/.i2p-plugin-keys/android.keystore
|
||||
STORE_PASSWORD=store.password
|
||||
KEY_ALIAS=key.alias
|
||||
KEY_PASSWORD=key.password
|
@ -10,11 +10,11 @@ POM_SCM_DEV_CONNECTION=scm:git:git@github.com:i2p/i2p.android.base.git
|
||||
POM_LICENCE_NAME=The Apache Software License, Version 2.0
|
||||
POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
POM_LICENCE_DIST=repo
|
||||
POM_DEVELOPER_ID=meeh
|
||||
POM_DEVELOPER_NAME=meeh
|
||||
POM_DEVELOPER_EMAIL=meeh@i2pmail.org
|
||||
POM_DEVELOPER_ID=idk
|
||||
POM_DEVELOPER_NAME=idk
|
||||
POM_DEVELOPER_EMAIL=hankhill19580@gmail.com
|
||||
|
||||
I2P_VERSION=0.9.45
|
||||
ANDROID_BUILD_TARGET_SDK_VERSION=28
|
||||
ANDROID_BUILD_TARGET_SDK_VERSION=29
|
||||
ANDROID_BUILD_SDK_VERSION=28
|
||||
|
||||
I2P_VERSION=0.9.50
|
||||
|
@ -3,7 +3,7 @@
|
||||
<string name="yes">Oui</string>
|
||||
<string name="no">Non</string>
|
||||
<string name="install_i2p_android">Installer I2P pour Android ?</string>
|
||||
<string name="you_must_have_i2p_android">I2P pour Android doit être installé et en fonction. Souhaitez-vous l’installer ?</string>
|
||||
<string name="you_must_have_i2p_android">I2P pour Android doit être installé et en fonction. Voulez-vous l’installer ?</string>
|
||||
<string name="start_i2p_android">Démarrer I2P pour Android ?</string>
|
||||
<string name="would_you_like_to_start_i2p_android">Il semblerait qu’I2P pour Android ne soit pas en fonction. Souhaitez-vous le démarrer ?</string>
|
||||
<string name="would_you_like_to_start_i2p_android">Il semblerait qu’I2P pour Android ne soit pas en fonction. Voulez-vous le démarrer ?</string>
|
||||
</resources>
|
||||
|
9
lib/helper/src/main/res/values-tk/strings.xml
Normal file
9
lib/helper/src/main/res/values-tk/strings.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="yes">Evet</string>
|
||||
<string name="no">Hayır</string>
|
||||
<string name="install_i2p_android">I2P Android guruň?</string>
|
||||
<string name="you_must_have_i2p_android">I2P Android gurnalan we işleýän bolmaly. Gurmak isleýärsiňizmi?</string>
|
||||
<string name="start_i2p_android">I2P Android başlaň?</string>
|
||||
<string name="would_you_like_to_start_i2p_android">I2P Android işlemeýän ýaly. Başlamak isleýärsiňizmi?</string>
|
||||
</resources>
|
@ -13,6 +13,7 @@ artifacts {
|
||||
routerjars file: file('libs/i2ptunnel.jar'), builtBy: buildRouter
|
||||
routerjars file: file('libs/i2ptunnel-ui.jar'), builtBy: buildRouter
|
||||
routerjars file: file('libs/addressbook.jar'), builtBy: buildRouter
|
||||
routerjars file: file('libs/sam.jar'), builtBy: buildRouter
|
||||
//routerjars file: file('libs/BOB.jar'), builtBy: buildRouter
|
||||
}
|
||||
clean.dependsOn cleanBuildRouter
|
||||
|
@ -20,6 +20,7 @@
|
||||
<available property="have.bob" file="${i2plib}/BOB.jar" />
|
||||
<available property="have.newsxml" file="${i2pbase}/apps/routerconsole/java/build/newsxml.jar" />
|
||||
<available property="have.i2ptunnel" file="${i2plib}/i2ptunnel-ui.jar" />
|
||||
<available property="have.sam" file="${i2plib}/sam.jar" />
|
||||
<available property="have.addressbook" file="${i2plib}/addressbook.jar" />
|
||||
|
||||
<target name="buildNewsXMLJar" unless="have.newsxml">
|
||||
@ -36,7 +37,11 @@
|
||||
<ant dir="${i2pbase}" inheritall="false" useNativeBasedir="true" target="buildBOB" />
|
||||
</target>
|
||||
|
||||
<target name="buildrouter" depends="buildNewsXMLJar, buildI2PTunnelJar, buildAddressbook">
|
||||
<target name="buildSAM" unless="have.sam">
|
||||
<ant dir="${i2pbase}" inheritall="false" useNativeBasedir="true" target="buildSAM" />
|
||||
</target>
|
||||
|
||||
<target name="buildrouter" depends="buildNewsXMLJar, buildI2PTunnelJar, buildAddressbook, buildSAM">
|
||||
<mkdir dir="${jar.libs.dir}" />
|
||||
|
||||
<!-- newsxml -->
|
||||
@ -50,10 +55,15 @@
|
||||
<copy file="${i2plib}/addressbook.jar" todir="${jar.libs.dir}" />
|
||||
|
||||
<!-- bob -->
|
||||
<!--
|
||||
|
||||
<!--
|
||||
<copy file="${i2plib}/BOB.jar" todir="${jar.libs.dir}" />
|
||||
-->
|
||||
|
||||
<!-- sam -->
|
||||
<copy file="${i2plib}/sam.jar" todir="${jar.libs.dir}" />
|
||||
|
||||
|
||||
</target>
|
||||
|
||||
<target name="clean">
|
||||
|
Reference in New Issue
Block a user