Commit 0ce04884 authored by ProMIND's avatar ProMIND
Browse files

Eddie for Android 2.5 - Production release

parent 2aa133bf
Changelog 2.5 (VC 27) - Release date: 23 December 2021 by ProMIND
- [ProMIND] Production release
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Changelog 2.5 RC 1 (VC 26) - Release date: 17 December 2021 by ProMIND
- [ProMIND] Added "QUERY_ALL_PACKAGES" permission to the manifest
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Changelog 2.5 beta 1 (VC 26) - Release date: 10 December 2021 by ProMIND
- [ProMIND] Minimum TLS level now defaults to 1.2
- [ProMIND] VPN Lock is now off by default
- [ProMIND] Removed force aes-cbc suite option
- [ProMIND] Native library updated to the latest dependencies
- [ProMIND] "AirVPN profile" has been renamed to "AirVPN Key"
- [ProMIND] All android devices having at least API level 24 (Android 7) are now fully managed by Android system VPN facilities (including "VPN Always On" and "Block Connections without VPN")
- [ProMIND] In case a connected OpenVPN profile is about an AirVPN server, the name is shown across the whole app instead of the IP
- [ProMIND] Compression is now off by default
- [ProMIND] Language override is now immediate and does not need app restart anymore
Native Library
- [ProMIND] Updated to OpenVPN3 3.7.1 AirVPN
- [ProMIND] Moved to version 1.4 (Complete revision of code, structure and naming scheme)
- [ProMIND] Moved all header files in eddie directory into include directory
- [ProMIND] Renamed several 1.0 classes and members to more solid names
- [ProMIND] Removed all references to boost library functions and switched to standard C++ equivalents
api.cpp
- [ProMIND] Added sslLibraryVersion() function
api.hpp
- [ProMIND] Added sslLibraryVersion() function
vpnclient.cpp (Native library)
- [ProMIND] Renamed client.cpp to vpnclient.cpp
- [ProMIND] Implemented private method releaseJniCallbackObject()
- [ProMIND] Switched to instance model management for JNI callback object
- [ProMIND] removed tun_builder_set_block_ipv6() function
- [ProMIND] added tun_builder_set_allow_family() function
vpnclient.hpp (Native library)
- [ProMIND] Renamed client.hpp to vpnclient.hpp
- [ProMIND] Added private method releaseJniCallbackObject()
- [ProMIND] removed tun_builder_set_block_ipv6() function
- [ProMIND] added tun_builder_set_allow_family() function
common.h (Native library)
- [ProMIND] New file. It defines all common macros and includes
constants.cpp (Native library)
- [ProMIND] removed file
constants.h (Native library)
- [ProMIND] removed file
macros.h (Native library)
- [ProMIND] removed file
stdafx.h (Native library)
- [ProMIND] removed file
types.h (Native library)
- [ProMIND] removed file
utils.cpp (Native library)
- [ProMIND] Removed all C functions and reimplemented as relative class methods
- [ProMIND] Most of methods and functions have been rewritten from scratch
- [ProMIND] Removed all references to boost library functions and switched to standard C++ equivalents
AirVPNManifest.java
- [ProMIND] Added method getServerByIP()
- [ProMIND] Added method getFullServerDescription(String name)
- [ProMIND] Added method getFullServerDescriptionByIP(String ip)
- [ProMIND] Added method isEncrypted()
- [ProMIND] Added Continent stats
- [ProMIND] Added "Do not show again" methods for manifest messages
AirVPNUser.java
- [ProMIND] Added method isEncrypted()
- [ProMIND] private class getUserLocation is now aware of current local country setting
- [ProMIND] Added method reloadUserLocation()
AirVPNServerProvider.java
- [ProMIND] added "DEFAULT" case to getUserConnectionPriority() method
AirVPNServerSettingsActivity.java
- [ProMIND] TLS, Protocol, Port and IP Version are now linked to their relative default options
BootVPNActivity.java
- [ProMIND] Revamped VPN connection boot logics. It now supports AirVPN best server, AirVPN default server and AirVPN default country and improved management of default OpenVPN profile and last active connection
ConnectAirVPNServerFragment.java
- [ProMIND] Added default AirVPN items management
- [ProMIND] Added direct connection to country's best server via context menu
- [ProMIND] Added direct connection to continent and world best servers
- [ProMIND] exportOpenVPNProfile() now exports profiles both to internal databse and external file
- [ProMIND] Added export continent, country and server profile to file
ConnectOpenVpnProfileFragment.java
- [ProMIND] Added "set" and "unset" boot in context menu for OpenVPN profiles
CountryContinent.java
- [ProMIND] Added methods getTreeMapCountry and countryCount()
- [ProMIND] Added methods getTreeMapContinent() and continentCount()
EddieApplication.java
- [ProMIND] Initialization log messages are now sent once at the first run of the app instance
- [ProMIND] Classes SettingsManager, EddieLogger, SupportTools, VPNManager, MainActivity, CountryContinent, AirVPNManifest, AirVPNUser and NetworkStatusReceiver are now instantiated here and the unique instance is used all over the app
- [ProMIND] Checks whether manifest and user's data files are encrypted and sets "Enable Master Password" setting accordingly
- [ProMIND] Added method isVisible() returning whether the app is in foreground or visible
EddieEvent.java
- [ProMIND] Removed generic onAirVPNIgnoredDocumentRequest
- [ProMIND] Added onAirVPNIgnoredManifestDocumentRequest and onAirVPNIgnoredUserDocumentRequest
- [ProMIND] Added onAirVPNRequestError event
EddieEventListener.java
- [ProMIND] Removed generic onAirVPNIgnoredDocumentRequest
- [ProMIND] Added onAirVPNIgnoredManifestDocumentRequest and onAirVPNIgnoredUserDocumentRequest
- [ProMIND] Added onAirVPNRequestError event
EddieLogger.java
- [ProMIND] Added instance and context support in order to keep the log across multiple runs belonging to the same app instance
LogActivity.java
- [ProMIND] Added "Clear log" button
MainActivity.java
- [ProMIND] At startup checks whether system's "Block connections without VPN" setting is enable, if so VPN Lock is disabled and show a dialog
- [ProMIND] Added new VPN Status management
- [ProMIND] AirVPN Manifest messages are now shown only in case they have the "do not show again" flag turned off
- [ProMIND] Max reconnection retries now supports infinite
OpenVPNProfileDatabase.java
- [ProMIND] Added "boot" element and relative methods
- [ProMIND] Added "airVPNServerName" element and relative methods
- [ProMIND] Added "airVPNServerLocation" element and relative methods
- [ProMIND] Added "airVPNServerCountry" element and relative methods
SettingsActivity.java
- [ProMIND] In case system's "Block connections without VPN" setting is enable, VPN Lock is disabled and hidden
- [ProMIND] Added controls for new settings
- [ProMIND] Revised language change setting and adapted to new Android levels. The change is now immediate and does not require restart anymore
- [ProMIND] Added infinite option to max reconnection retries setting
SettingsManager.java
- [ProMIND] Added SYSTEM_IS_ALWAYS_ON_VPN and SYSTEM_VPN_LOCKOWN internal settings and relative get/set methods
- [ProMIND] Added AIRVPN_CURRENT_LOCAL_COUNTRY and AIRVPN_CURRENT_LOCAL_COUNTRY_DEFAULT internal settings and relative get/set methods
- [ProMIND] Added AIRVPN_DO_NOT_SHOW_AGAIN_MESSAGES and AIRVPN_DO_NOT_SHOW_AGAIN_MESSAGES_DEFAULT internal settings and relative get/set methods
VPN.java
- [ProMIND] Added CONNECTION_CANCELED to Status enum
VPNManager.java
- [ProMIND] Improved VPN concurrency management
VPNService.java
- [ProMIND] Check "VPN Always On" and "Block connections without VPN" system options and set Eddie's internal options accordingly
WebViewerActivity.java
- [ProMIND] http: and https: links are now opened by invoking the external browser
- [ProMIND] Added bottom "Do not show again" layout bar
- [ProMIND] Restore language/locale to the app setting and reverts Chrome/WebView default locale override
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Changelog 2.4 (VC 26) - Release date: 30 July 2019 by ProMIND
- [ProMIND] Production release
......@@ -149,6 +391,8 @@ OpenVPNTunnel.java
- [ProMIND] improved connection error handling
- [ProMIND] removed doRun() method. Method's body moved to run()
- [ProMIND] removed onTunBuilderSetBlockIPV6() method.
- [ProMIND] added onTunBuilderSetAllowFamily() method.
VPN.java
......@@ -156,6 +400,12 @@ VPN.java
- [ProMIND] Added CONNECTION_ERROR to Status enum
VPNContext.java
- [ProMIND] removed setBlockIPv6() method
- [ProMIND] added allowFamily() method
VPNService.java
- [ProMIND] Added method handleConnectionError()
......
# AirVPN Eddie 2.4 for Android
# AirVPN Eddie 2.5 for Android
* Free and open source OpenVPN GUI based on "OpenVPN 3.3 AirVPN"
* Free and open source OpenVPN GUI based on "OpenVPN 3.7.1 AirVPN"
* ChaCha20-Poly1305, AES-CBC and AES-GCM support on both OpenVPN Control and Data channels
* ChaCha20-Poly1305, AES-CBC and AES-GCM support on both OpenVPN Control and
Data channels
* The only Android application officially developed by AirVPN
......@@ -14,17 +15,18 @@
* Ergonomic and friendly interface
* Ability to start and connect the application at device boot
* Ability to start and connect the application at device startup
* Option to define which apps must have traffic inside or outside the VPN tunnel through white and black list
* Option to define which apps must have traffic inside or outside the VPN tunnel
through white and black list
* Localization in simplified and traditional Chinese, Danish, English, French, German,
* Localization in simplified and traditional Chinese, Danish, Dutch, English, French,
German, Italian, Portuguese, Russian, Spanish, Turkish
* Italian, Portuguese, Russian, Spanish, Turkish
* Full integration with AirVPN infrastructure and servers
* Full integration with AirVPN
* Enhanced security thanks to locally stored encrypted data through master password
* Enhanced security thanks to locally stored encrypted data through optional
master password
* Quick one-tap connection and smart, fully automated server selection
......@@ -32,6 +34,9 @@
* Manual server selection
* Ability to start and connect during device startup according to a priority list which includes
automatic choice, your defined country and your defined AirVPN server
* Smart attempts to bypass OpenVPN blocks featuring protocol and server fail-over
* Full Android TV compatibility including D-Pad support. Mouse emulation is not required.
......@@ -40,11 +45,12 @@
* AirVPN servers sorting options
* Customizable "Favorite" and "Forbidden" servers and countries
* Customizable "Default", "Favorite" and "Forbidden" servers and countries
* OpenVPN mimetype support to import profiles from external applications
* Multiple OpenVPN profile support. The app now imports and manages multiple OpenVPN profiles
* Multiple OpenVPN profile support. The app can import and manage multiple OpenVPN
profiles
* Support for custom bootstrap servers
......@@ -54,31 +60,57 @@
* User's subscription expiration date is shown in login/connection information
* The app is aware of concurrent VPN use. In case another app is granted VPN access, Eddie acts accordingly and releases VPN resources
* The app is aware of concurrent VPN use. In case another app is granted VPN access,
Eddie acts accordingly and releases VPN resources
* Optional local networks access. In such case, local network devices are exempted from the VPN and can be accessed within the local devices
* Optional local networks access. In such case, local network devices are exempted from
the VPN and can be accessed within the local devices
* Localization override. User can choose the default language and localization from one of the available ones
* Localization override. User can choose the default language and localization from one
of the available ones
* Favorite and forbidden lists can be emptied with a single tap
* VPN Lock can now be disabled or enabled from settings
* Ability to directly select an AirVPN area (country, continent, planet) to connect to
* VPN reconnection in case of unexpected OpenVPN disconnection. (It requires VPN Lock to
be disabled)
* VPN concurrency management
* VPN reconnection in case of unexpected OpenVPN disconnection. (It requires VPN Lock to be disabled)
* Full integration with VPN traffic leaks prevention by system in Android 7 or higher
* User can generate an OpenVPN profile for any AirVPN server or country and save it in OpenVPN profile manager
* Full compatibility with Android 10, 11 and 12
* Server scoring algorithm implementing the latest AirVPN balancing factors in order to determine the best server for quick connection
* User can generate or save an OpenVPN profile for any AirVPN server or country and save it
to the internal OpenVPN profile manager or export it
* Network name and extra information are shown along with network type
Device network status management
* On the fly app language change allowing to switch language without re-starting application
* Exclusive optional VPN lock in case the device cannot take advantage of Android's VPN direct
management (Android 5 and 6)
* Server scoring algorithm implementing the latest AirVPN balancing factors in order to
determine the best server for quick connection
* Network name and extra information are shown along with network type Device network
status management
* The only Android application officially developed by AirVPN
* Fully compatible with Android 5.1 and higher
* Fully compatible with Android TV 5.1 and higher
With AirVPN you can keep your Internet traffic hidden from the eyes of your ISP and from any malicious entity wiretapping your line, connect safely even via a public Internet hotspot, unblock geo-restricted websites, bypass web sites blocks and protect the integrity of your communications.
With AirVPN you can keep your Internet traffic hidden from the eyes of your ISP and from
any malicious entity wiretapping your line, connect safely even via a public Internet hotspot,
unblock geo-restricted websites, bypass web sites blocks and protect the integrity of your
communications.
Thanks to AirVPN, Eddie protects your Android device traffic. Eddie can be used even with any other VPN service based on OpenVPN.
Thanks to AirVPN, Eddie protects your Android device traffic. Eddie can be used even with any
other VPN service based on OpenVPN.
To build AirVPN Eddie for Android you need Android Studio or gradle and Android sdk properly installed on your system
To build AirVPN Eddie for Android you need Android Studio or gradle and Android sdk properly
installed on your system
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
android
{
compileSdkVersion 30
defaultConfig
{
applicationId "org.airvpn.eddie"
minSdkVersion 22
targetSdkVersion 27
versionCode 26
versionName "2.4"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
targetSdkVersion 30
versionCode 27
versionName "2.5"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
buildTypes {
release {
buildTypes
{
release
{
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
lintOptions
{
checkReleaseBuilds false
abortOnError false
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
compileOptions
{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
dependencies
{
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
}
\ No newline at end of file
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
package org.airvpn.eddie;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
......
<?xml version="1.0" encoding="utf-8"?>
<manifest package="org.airvpn.eddie"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" >
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="internalOnly">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:ignore="QueryAllPackagesPermission" />
<uses-feature android:name="android.software.leanback" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<application
android:name=".EddieApplication"
android:name="EddieApplication"
android:allowBackup="false"
android:fullBackupOnly="false"
android:launchMode = "singleInstance"
android:label="@string/app_name"
android:icon="@drawable/icon"
android:roundIcon="@drawable/icon"
android:banner="@drawable/tv_banner"
android:logo="@drawable/tv_banner"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true" >
<activity android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize" >
android:configChanges="locale|orientation|keyboardHidden|screenSize" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
......@@ -83,7 +88,8 @@
android:icon="@drawable/tv_banner"
android:roundIcon="@drawable/tv_banner"
android:banner="@drawable/tv_banner"
android:logo="@drawable/tv_banner" >
android:logo="@drawable/tv_banner"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
......@@ -138,7 +144,8 @@
</activity>
<receiver android:name=".NetworkStatusReceiver" >
<receiver android:name=".NetworkStatusReceiver"
android:exported="true" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
......@@ -148,46 +155,54 @@
android:name=".LogActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:configChanges="orientation|keyboardHidden|screenSize" >
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="true" >
</activity>
<activity
android:name=".SettingsActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:configChanges="orientation|keyboardHidden|screenSize" >
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="true" >
</activity>
<activity
android:name=".PackageChooserActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:configChanges="orientation|keyboardHidden|screenSize" >
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="true" >
</activity>
<activity
android:name=".WebViewerActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:configChanges="orientation|keyboardHidden|screenSize" >
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="true" >
</activity>
<activity
android:name=".AirVPNServerSettingsActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:configChanges="orientation|keyboardHidden|screenSize" >
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="true" >
</activity>
<activity
android:name=".BootVPNActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoDisplay" >
android:theme="@android:style/Theme.NoDisplay"
android:exported="true" >
</activity>
<service
android:name=".VPNService"
android:permission="android.permission.BIND_VPN_SERVICE" >
android:permission="android.permission.BIND_VPN_SERVICE"
android:foregroundServiceType="connectedDevice"
android:exported="true" >
<intent-filter>
<action android:name="android.net.VpnService"/>
......@@ -195,11 +210,13 @@
</service>
<receiver android:name=".EddieBroadcastReceiver"
android:enabled="true" >
android:enabled="true"
android:exported="true" >
<intent-filter android:priority="999">
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
......
......@@ -7,18 +7,11 @@
<style>
body
{
margin: 0 auto;
padding: 2em;
background-color: #eeeeee;
}
.page
{
align-items: center;
justify-content: center;
margin-top: 1em;
margin-bottom: 2em;
}
.imgheader
{
display: block;
......@@ -36,16 +29,13 @@
.developer
{
width: 100%;
display: block;
overflow: hidden;
margin-top: 1em;
margin-bottom: 1em;
padding-top: 1em;