diff --git a/.drone.jsonnet b/.drone.jsonnet
index 54951b7b6..6715be1ba 100644
--- a/.drone.jsonnet
+++ b/.drone.jsonnet
@@ -1,6 +1,6 @@
local default_deps_base='libsystemd-dev python3-dev libuv1-dev libunbound-dev nettle-dev libssl-dev libevent-dev libsqlite3-dev libcurl4-openssl-dev';
local default_deps_nocxx='libsodium-dev ' + default_deps_base; // libsodium-dev needs to be >= 1.0.18
-local default_deps='g++ ' + default_deps_nocxx; // g++ sometimes needs replacement
+local default_deps='build-essential ' + default_deps_nocxx;
local default_windows_deps='mingw-w64 zip nsis';
local docker_base = 'registry.oxen.rocks/lokinet-ci-';
@@ -49,20 +49,20 @@ local debian_pipeline(name, image,
] else []
) + [
'eatmydata ' + apt_get_quiet + ' dist-upgrade -y',
- 'eatmydata ' + apt_get_quiet + ' install -y gdb cmake git ninja-build pkg-config ccache ' + deps,
+ 'eatmydata ' + apt_get_quiet + ' install -y gdb cmake git pkg-config ccache ' + deps,
'mkdir build',
'cd build',
- 'cmake .. -G Ninja -DWITH_SETCAP=OFF -DCMAKE_CXX_FLAGS=-fdiagnostics-color=always -DCMAKE_BUILD_TYPE='+build_type+' ' +
+ 'cmake .. -DWITH_SETCAP=OFF -DCMAKE_CXX_FLAGS=-fdiagnostics-color=always -DCMAKE_BUILD_TYPE='+build_type+' ' +
(if werror then '-DWARNINGS_AS_ERRORS=ON ' else '') +
'-DWITH_LTO=' + (if lto then 'ON ' else 'OFF ') +
cmake_extra,
- 'ninja -j' + jobs + ' -v',
+ 'make -j' + jobs,
'../contrib/ci/drone-gdb.sh ./test/testAll --use-colour yes',
] + extra_cmds,
}
],
};
-local apk_builder(name, image, extra_cmds=[], allow_fail=false) = {
+local apk_builder(name, image, extra_cmds=[], allow_fail=false, jobs=6) = {
kind: 'pipeline',
type: 'docker',
name: name,
@@ -76,11 +76,7 @@ local apk_builder(name, image, extra_cmds=[], allow_fail=false) = {
[if allow_fail then "failure"]: "ignore",
environment: { SSH_KEY: { from_secret: "SSH_KEY" }, ANDROID: "android" },
commands: [
- "cd android",
- "rm -f local.properties",
- "echo 'sdk.dir=/usr/lib/android-sdk' >> local.properties",
- "echo 'ndk.dir=/usr/lib/android-ndk' >> local.properties",
- "GRADLE_USER_HOME=/cache/gradle/${DRONE_STAGE_MACHINE} gradle --no-daemon assembleDebug",
+ 'JOBS='+jobs+' NDK=/usr/lib/android-ndk ./contrib/android.sh'
] + extra_cmds
}
]
@@ -113,17 +109,10 @@ local windows_cross_pipeline(name, image,
'echo "man-db man-db/auto-update boolean false" | debconf-set-selections',
apt_get_quiet + ' update',
apt_get_quiet + ' install -y eatmydata',
- 'eatmydata ' + apt_get_quiet + ' install -y build-essential cmake git ninja-build pkg-config ccache g++-mingw-w64-x86-64-posix nsis zip automake libtool',
+ 'eatmydata ' + apt_get_quiet + ' install -y build-essential cmake git pkg-config ccache g++-mingw-w64-x86-64-posix nsis zip automake libtool',
'update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix',
'update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix',
- 'mkdir build',
- 'cd build',
- 'cmake .. -G Ninja -DCMAKE_EXE_LINKER_FLAGS=-fstack-protector -DCMAKE_CXX_FLAGS=-fdiagnostics-color=always -DCMAKE_TOOLCHAIN_FILE=../contrib/cross/mingw'+toolchain+'.cmake -DCMAKE_BUILD_TYPE='+build_type+' ' +
- (if werror then '-DWARNINGS_AS_ERRORS=ON ' else '') +
- (if lto then '' else '-DWITH_LTO=OFF ') +
- "-DBUILD_STATIC_DEPS=ON -DDOWNLOAD_SODIUM=ON -DBUILD_PACKAGE=ON -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DNATIVE_BUILD=OFF -DSTATIC_LINK=ON" +
- cmake_extra,
- 'ninja -j' + jobs + ' -v package',
+ 'JOBS=' + jobs + ' ./contrib/windows.sh'
] + extra_cmds,
}
],
@@ -204,9 +193,9 @@ local mac_builder(name,
'ulimit -n 1024', // because macos sets ulimit to 256 for some reason yeah idk
'mkdir build',
'cd build',
- 'cmake .. -G Ninja -DCMAKE_CXX_FLAGS=-fcolor-diagnostics -DCMAKE_BUILD_TYPE='+build_type+' ' +
+ 'cmake .. -DCMAKE_CXX_FLAGS=-fcolor-diagnostics -DCMAKE_BUILD_TYPE='+build_type+' ' +
(if werror then '-DWARNINGS_AS_ERRORS=ON ' else '') + cmake_extra,
- 'ninja -j' + jobs + ' -v',
+ 'make -j' + jobs,
'./test/testAll --use-colour yes',
] + extra_cmds,
}
@@ -254,12 +243,12 @@ local mac_builder(name,
],
jobs=4),
// android apk builder
- apk_builder("android apk", "registry.oxen.rocks/lokinet-ci-android", extra_cmds=['UPLOAD_OS=anrdoid ../contrib/ci/drone-static-upload.sh']),
-
+ apk_builder("android apk", "registry.oxen.rocks/lokinet-ci-android", extra_cmds=['UPLOAD_OS=anrdoid ./contrib/ci/drone-static-upload.sh']),
+
// Windows builds (x64)
windows_cross_pipeline("Windows (amd64)", docker_base+'debian-win32-cross',
toolchain='64', extra_cmds=[
- '../contrib/ci/drone-static-upload.sh'
+ './contrib/ci/drone-static-upload.sh'
]),
// Static build (on bionic) which gets uploaded to builds.lokinet.dev:
diff --git a/android/.gitignore b/android/.gitignore
deleted file mode 100644
index b8e7e769a..000000000
--- a/android/.gitignore
+++ /dev/null
@@ -1,18 +0,0 @@
-gen
-tests
-bin
-libs
-log*
-obj
-.gradle
-.idea
-.externalNativeBuild
-ant.properties
-local.properties
-build.sh
-android.iml
-build
-gradle
-gradlew
-gradlew.bat
-gradle.properties
\ No newline at end of file
diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
deleted file mode 100755
index 082852b42..000000000
--- a/android/AndroidManifest.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/android/build.gradle b/android/build.gradle
deleted file mode 100644
index 3fd226539..000000000
--- a/android/build.gradle
+++ /dev/null
@@ -1,81 +0,0 @@
-buildscript {
- repositories {
- mavenCentral()
- jcenter()
- google()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:4.0.1'
- }
-}
-
-apply plugin: 'com.android.application'
-
-
-repositories {
- jcenter()
- maven {
- url 'https://maven.google.com'
- }
- google()
-}
-
-android {
- compileSdkVersion 28
- defaultConfig {
- applicationId "network.loki.lokinet"
- targetSdkVersion 28
- minSdkVersion 23
- versionCode 1
- versionName '0.8.4'
- externalNativeBuild {
- cmake {
- targets "lokinet-android"
- arguments "-DWITH_LTO=OFF", "-DCXXOPTS_BUILD_TESTS=OFF","-DWITH_TESTS=OFF", "-DCMAKE_CROSSCOMPILING=ON", "-DNATIVE_BUILD=OFF", "-DANDROID=ON", "-DANDROID_STL=c++_static", "-DBUILD_STATIC_DEPS=ON", "-DBUILD_SHARED_LIBS=OFF", "-DSTATIC_LINK=ON", "-DANDROID_ARM_MODE=arm", "-DFORCE_OXENMQ_SUBMODULE=ON", "-DBUILD_LIBLOKINET=OFF"
- cppFlags "-std=c++17"
- abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
- // abiFilters 'armeabi-v7a'
- // abiFilters 'arm64-v8a', 'x86_64', 'armeabi-v7a'
- }
- }
-
-
- }
- externalNativeBuild {
- cmake {
- path "../CMakeLists.txt"
- }
- }
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = ['src']
- res.srcDirs = ['res']
- jniLibs.srcDirs = ['libs']
- assets.srcDirs = ['assets']
- }
- }
- signingConfigs {
- jeff {
- storeFile file("jeff-apk.jks")
- keyAlias "jeff-apk"
- }
- }
- buildTypes {
- release {
- minifyEnabled true
- //signingConfig signingConfigs.jeff
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
- debuggable false
- }
- debug {
- // jniDebuggable true
- }
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
-}
-
-
diff --git a/android/build.xml b/android/build.xml
deleted file mode 100644
index ffe9081c8..000000000
--- a/android/build.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/android/proguard-project.txt b/android/proguard-project.txt
deleted file mode 100644
index f2fe1559a..000000000
--- a/android/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
diff --git a/android/project.properties b/android/project.properties
deleted file mode 100644
index 919ca9c3b..000000000
--- a/android/project.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system edit
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-#
-# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
-#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
-
-# Project target.
-target=android-28
diff --git a/android/readme.md b/android/readme.md
deleted file mode 100644
index 647032dea..000000000
--- a/android/readme.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# lokinet android
-
-this directory contains basic stuff for lokinet on android.
-
-## Prerequsites
-
-To build you need the following:
-
-* Gradle (6.x)
-* Android SDK (latest version)
-* Android NDK (latest version)
-
-## Building
-
-Next set up the path to Android SDK and NDK in `local.properties`
-
-```
-sdk.dir=/path/to/android/sdk
-ndk.dir=/path/to/android/ndk
-```
-
-Then build:
-
- $ gradle assemble
-
-This fetches a large amount (several dozen Gigabytes) of files from some
-server somewhere dumping it on your filesystem to make the thing do the
-building, then proceeds to peg all your cores for several dozen minutes
-while it does the required incantations to build 2 apks.
-
-The build outputs apks to to subdirectories in `build/outputs/apk/`
-one called `debug` for debug builds and one called `release` for release builds.
-
diff --git a/android/res/drawable/icon.png b/android/res/drawable/icon.png
deleted file mode 100644
index 30ad9ddcb..000000000
Binary files a/android/res/drawable/icon.png and /dev/null differ
diff --git a/android/res/layout/activity_perms_asker.xml b/android/res/layout/activity_perms_asker.xml
deleted file mode 100644
index 4afe5c037..000000000
--- a/android/res/layout/activity_perms_asker.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/android/res/layout/activity_perms_explanation.xml b/android/res/layout/activity_perms_explanation.xml
deleted file mode 100644
index 08445664e..000000000
--- a/android/res/layout/activity_perms_explanation.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/android/res/menu/options_main.xml b/android/res/menu/options_main.xml
deleted file mode 100644
index dffc63222..000000000
--- a/android/res/menu/options_main.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml
deleted file mode 100755
index 16423a986..000000000
--- a/android/res/values/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
- lokinet
- Start
- Stop
- Already stopped
- lokinet loaded
- lokinet is starting
- lokinet: loaded JNI libraries
- lokinet started
- lokinet start failed
- lokinet has stopped
- remaining
- Prompt
- got bootstrap node info
- failed to bootstrap
- failed to create netdb directory
- failed to set up vpn tunnel
-
diff --git a/android/res/values/template-dimens.xml b/android/res/values/template-dimens.xml
deleted file mode 100644
index 36847c970..000000000
--- a/android/res/values/template-dimens.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
- 4dp
- 8dp
- 16dp
- 32dp
- 64dp
-
-
-
- @dimen/margin_medium
- @dimen/margin_medium
-
-
\ No newline at end of file
diff --git a/android/settings.gradle b/android/settings.gradle
deleted file mode 100644
index b2f9a127a..000000000
--- a/android/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-rootProject.name = "lokinet"
diff --git a/android/src/network/loki/lokinet/LokiNetActivity.java b/android/src/network/loki/lokinet/LokiNetActivity.java
deleted file mode 100755
index cbe836465..000000000
--- a/android/src/network/loki/lokinet/LokiNetActivity.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package network.loki.lokinet;
-
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.URL;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import android.app.Activity;
-
-import android.content.Context;
-
-import android.content.ComponentName;
-import android.content.ServiceConnection;
-import android.Manifest;
-
-import android.net.VpnService;
-import android.os.AsyncTask;
-import android.content.Intent;
-import android.os.Bundle;
-
-import android.os.IBinder;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.widget.TextView;
-
-import android.util.Log;
-
-
-public class LokiNetActivity extends Activity {
- private static final String TAG = "lokinet-activity";
- private TextView textView;
- private static final String DefaultBootstrapURL = "https://seed.lokinet.org/lokinet.signed";
-
- private AsyncBootstrap bootstrapper;
-
- public static final String LOG_TAG = "LokinetDaemon";
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- textView = new TextView(this);
- setContentView(textView);
- System.loadLibrary("lokinet-android");
- }
-
-
- private static void writeFile(File out, InputStream instream) throws IOException {
- OutputStream outstream = new FileOutputStream(out);
- byte[] buffer = new byte[512];
- int len;
- try {
- do {
- len = instream.read(buffer);
- if (len > 0) {
- outstream.write(buffer, 0, len);
- }
- }
- while (len != -1);
- } finally {
- outstream.close();
- }
- }
-
- public void startLokinet()
- {
- if(bootstrapper != null)
- return;
- bootstrapper = new AsyncBootstrap();
- bootstrapper.execute(DefaultBootstrapURL);
- }
-
- public void runLokinetService()
- {
- Intent intent = VpnService.prepare(getApplicationContext());
- if (intent != null)
- {
- Log.d(LOG_TAG, "VpnService.prepare() returned an Intent, so launch that intent.");
- startActivityForResult(intent, 0);
- }
- else
- {
- Log.w(LOG_TAG, "VpnService.prepare() returned null, not running.");
- }
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data)
- {
- if (resultCode == RESULT_OK)
- {
- Log.d(LOG_TAG, "VpnService prepared intent RESULT_OK, launching LokinetDaemon Service");
- startService(new Intent(LokiNetActivity.this,
- LokinetDaemon.class));
- }
- else
- {
- Log.d(LOG_TAG, "VpnService prepared intent NOT RESULT_OK, shit.");
- }
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- textView = null;
- }
-
- public File getRootDir()
- {
- return getFilesDir();
- }
-
- private class AsyncBootstrap extends AsyncTask
- {
- public String doInBackground(String ... urls) {
- try
- {
- File bootstrapFile = new File(getRootDir(), "bootstrap.signed");
- URL bootstrapURL = new URL(urls[0]);
- InputStream instream = bootstrapURL.openStream();
- writeFile(bootstrapFile, instream);
- instream.close();
- return getString(R.string.bootstrap_ok);
- }
- catch(Exception thrown)
- {
- return getString(R.string.bootstrap_fail) + ": " + throwableToString(thrown);
- }
- }
- public void onPostExecute(String val) {
- textView.setText(val);
- if(val.equals(getString(R.string.bootstrap_ok)))
- runLokinetService();
- bootstrapDone();
- }
- }
-
- private void bootstrapDone()
- {
- bootstrapper = null;
- }
-
- private CharSequence throwableToString(Throwable tr) {
- StringWriter sw = new StringWriter(8192);
- PrintWriter pw = new PrintWriter(sw);
- tr.printStackTrace(pw);
- pw.close();
- return sw.toString();
- }
-
-
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.options_main, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id = item.getItemId();
-
- switch(id){
- case R.id.action_start:
- startLokinet();
- return true;
- case R.id.action_stop:
- return true;
- }
-
- return super.onOptionsItemSelected(item);
- }
-
-}
diff --git a/android/src/network/loki/lokinet/NetworkStateChangeReceiver.java b/android/src/network/loki/lokinet/NetworkStateChangeReceiver.java
deleted file mode 100644
index c4d7764fb..000000000
--- a/android/src/network/loki/lokinet/NetworkStateChangeReceiver.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package network.loki.lokinet;
-
-import android.util.Log;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-
-public class NetworkStateChangeReceiver extends BroadcastReceiver {
-
- private static final String TAG = "lokinet";
-
- //api level 1
- @Override
- public void onReceive(final Context context, final Intent intent) {
- Log.d(TAG,"Network state change");
- try {
- ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
- boolean isConnected = activeNetworkInfo!=null && activeNetworkInfo.isConnected();
- // https://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html?hl=ru
- // boolean isWiFi = activeNetworkInfo!=null && (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI);
- } catch (Throwable tr) {
- Log.d(TAG,"",tr);
- }
- }
-}
diff --git a/android/src/network/loki/lokinet/PermsAskerActivity.java b/android/src/network/loki/lokinet/PermsAskerActivity.java
deleted file mode 100644
index f71d0608c..000000000
--- a/android/src/network/loki/lokinet/PermsAskerActivity.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package network.loki.lokinet;
-
-import android.Manifest;
-import android.app.Activity;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.Button;
-import android.widget.TextView;
-
-import java.lang.reflect.Method;
-
-//dangerous perms, per https://developer.android.com/guide/topics/permissions/normal-permissions.html :
-//android.permission.WRITE_EXTERNAL_STORAGE
-public class PermsAskerActivity extends Activity {
-
- private static final int PERMISSION_VPN = 0;
-
- private Button button_request_write_ext_storage_perms;
- private TextView textview_retry;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- startMainActivity();
- /*
- //if less than Android 6, no runtime perms req system present
- if (android.os.Build.VERSION.SDK_INT < 23) {
-
- return;
- }
-
- setContentView(R.layout.activity_perms_asker);
- button_request_write_ext_storage_perms = (Button) findViewById(R.id.button_request_write_ext_storage_perms);
- textview_retry = (TextView) findViewById(R.id.textview_retry);
-
- button_request_write_ext_storage_perms.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- request_write_ext_storage_perms();
- }
- });
- request_write_ext_storage_perms();
- */
- }
-
- private void request_write_ext_storage_perms() {
-
- textview_retry.setVisibility(TextView.GONE);
- button_request_write_ext_storage_perms.setVisibility(Button.GONE);
-
- Method methodCheckPermission;
- Method method_shouldShowRequestPermissionRationale;
- Method method_requestPermissions;
- try {
- methodCheckPermission = getClass().getMethod("checkSelfPermission", String.class);
- method_shouldShowRequestPermissionRationale =
- getClass().getMethod("shouldShowRequestPermissionRationale", String.class);
- method_requestPermissions =
- getClass().getMethod("requestPermissions", String[].class, int.class);
- } catch (NoSuchMethodException e) {
- throw new RuntimeException(e);
- }
- Integer resultObj;
- try {
- resultObj = (Integer) methodCheckPermission.invoke(
- this, Manifest.permission.BIND_VPN_SERVICE);
- } catch (Throwable e) {
- throw new RuntimeException(e);
- }
-
- if (resultObj != PackageManager.PERMISSION_GRANTED) {
-
- // Should we show an explanation?
- Boolean aBoolean;
- try {
- aBoolean = (Boolean) method_shouldShowRequestPermissionRationale.invoke(this,
- Manifest.permission.BIND_VPN_SERVICE);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- if (aBoolean) {
-
- // Show an explanation to the user *asynchronously* -- don't block
- // this thread waiting for the user's response! After the user
- // sees the explanation, try again to request the permission.
-
- showExplanation();
-
- } else {
-
- // No explanation needed, we can request the permission.
-
- try {
- method_requestPermissions.invoke(this,
- new String[]{Manifest.permission.BIND_VPN_SERVICE},
- PERMISSION_VPN);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- } else startMainActivity();
- }
-
- @Override
- public void onRequestPermissionsResult(int requestCode,
- String permissions[], int[] grantResults) {
- switch (requestCode) {
- case PERMISSION_VPN: {
- // If request is cancelled, the result arrays are empty.
- if (grantResults.length > 0
- && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
-
- // permission was granted, yay! Do the
- // contacts-related task you need to do.
-
- startMainActivity();
-
- } else {
-
- // permission denied, boo! Disable the
- // functionality that depends on this permission.
- textview_retry.setText("you need to allow this to continue");
- textview_retry.setVisibility(TextView.VISIBLE);
- button_request_write_ext_storage_perms.setVisibility(Button.VISIBLE);
- }
- return;
- }
-
- // other 'case' lines to check for other
- // permissions this app might request.
- }
- }
-
- private void startMainActivity() {
- startActivity(new Intent(this, LokiNetActivity.class));
- finish();
- }
-
- private static final int SHOW_EXPLANATION_REQUEST = 1; // The request code
- private void showExplanation() {
- Intent intent = new Intent(this, PermsExplanationActivity.class);
- startActivityForResult(intent, SHOW_EXPLANATION_REQUEST);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- // Check which request we're responding to
- if (requestCode == SHOW_EXPLANATION_REQUEST) {
- // Make sure the request was successful
- if (resultCode == RESULT_OK) {
- // Request the permission
- Method method_requestPermissions;
- try {
- method_requestPermissions =
- getClass().getMethod("requestPermissions", String[].class, int.class);
- } catch (NoSuchMethodException e) {
- throw new RuntimeException(e);
- }
- try {
- method_requestPermissions.invoke(this,
- new String[]{Manifest.permission.BIND_VPN_SERVICE},
- PERMISSION_VPN);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- } else {
- finish(); //close the app
- }
- }
- }
-}
diff --git a/android/src/network/loki/lokinet/PermsExplanationActivity.java b/android/src/network/loki/lokinet/PermsExplanationActivity.java
deleted file mode 100644
index bbea36054..000000000
--- a/android/src/network/loki/lokinet/PermsExplanationActivity.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package network.loki.lokinet;
-
-import android.app.ActionBar;
-import android.content.Intent;
-import android.os.Bundle;
-import android.app.Activity;
-import android.view.View;
-import android.widget.Button;
-
-public class PermsExplanationActivity extends Activity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_perms_explanation);
- ActionBar actionBar = getActionBar();
- if(actionBar!=null)actionBar.setHomeButtonEnabled(false);
- Button button_ok = (Button) findViewById(R.id.button_ok);
- button_ok.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- returnFromActivity();
- }
- });
- }
-
- private void returnFromActivity() {
- Intent data = new Intent();
- Activity parent = getParent();
- if (parent == null) {
- setResult(Activity.RESULT_OK, data);
- } else {
- parent.setResult(Activity.RESULT_OK, data);
- }
- finish();
- }
-
-}
diff --git a/cmake/StaticBuild.cmake b/cmake/StaticBuild.cmake
index 264252d03..44ef19ea9 100644
--- a/cmake/StaticBuild.cmake
+++ b/cmake/StaticBuild.cmake
@@ -178,8 +178,8 @@ set(build_def_DEPENDS "")
set(build_def_PATCH_COMMAND "")
set(build_def_CONFIGURE_COMMAND ./configure ${cross_host} --disable-shared --prefix=${DEPS_DESTDIR} --with-pic
"CC=${deps_cc}" "CXX=${deps_cxx}" "CFLAGS=${deps_CFLAGS}" "CXXFLAGS=${deps_CXXFLAGS}" ${cross_rc})
-set(build_def_BUILD_COMMAND make)
-set(build_def_INSTALL_COMMAND make install)
+set(build_def_BUILD_COMMAND $(MAKE))
+set(build_def_INSTALL_COMMAND $(MAKE) install)
set(build_def_BUILD_BYPRODUCTS ${DEPS_DESTDIR}/lib/lib___TARGET___.a ${DEPS_DESTDIR}/include/___TARGET___.h)
function(build_external target)
@@ -247,7 +247,7 @@ build_external(openssl
--prefix=${DEPS_DESTDIR} ${openssl_extra_opts} no-shared no-capieng no-dso no-dtls1 no-ec_nistp_64_gcc_128 no-gost
no-heartbeats no-md2 no-rc5 no-rdrand no-rfc3779 no-sctp no-ssl-trace no-ssl2 no-ssl3
no-static-engine no-tests no-weak-ssl-ciphers no-zlib no-zlib-dynamic "CFLAGS=${deps_CFLAGS}"
- INSTALL_COMMAND make install_sw
+ INSTALL_COMMAND $(MAKE) install_sw
BUILD_BYPRODUCTS
${DEPS_DESTDIR}/lib/libssl.a ${DEPS_DESTDIR}/lib/libcrypto.a
${DEPS_DESTDIR}/include/openssl/ssl.h ${DEPS_DESTDIR}/include/openssl/crypto.h
@@ -383,7 +383,7 @@ foreach(curl_arch ${curl_arches})
--without-zsh-functions-dir --without-fish-functions-dir
"CC=${deps_cc}" "CFLAGS=${deps_noarch_CFLAGS}${cflags_extra}" ${curl_extra}
BUILD_COMMAND true
- INSTALL_COMMAND make -C lib install && make -C include install
+ INSTALL_COMMAND $(MAKE) -C lib install && $(MAKE) -C include install
BUILD_BYPRODUCTS
${curl_prefix}/lib/libcurl.a
${curl_prefix}/include/curl/curl.h
diff --git a/contrib/android.sh b/contrib/android.sh
new file mode 100755
index 000000000..ff2b434f4
--- /dev/null
+++ b/contrib/android.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+set -e
+set -x
+test x$NDK = x && exit 1
+root="$(readlink -f $(dirname $0)/../)"
+out=$root/lokinet-android-$(git describe)
+mkdir -p $out
+mkdir -p $root/build-android
+cd $root/build-android
+for abi in armeabi-v7a arm64-v8a x86 x86_64 ; do
+ mkdir -p build-$abi $out/$abi
+ cd build-$abi
+ cmake \
+ -G 'Unix Makefiles' \
+ -DANDROID=ON \
+ -DANDROID_ABI=$abi \
+ -DANDROID_ARM_MODE=arm \
+ -DANDROID_PLATFORM=android-23 \
+ -DANDROID_STL=c++_static \
+ -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
+ -DBUILD_STATIC_DEPS=ON \
+ -DBUILD_PACKAGE=ON \
+ -DBUILD_SHARED_LIBS=OFF \
+ -DBUILD_TESTING=OFF \
+ -DBUILD_LIBLOKINET=OFF \
+ -DWITH_TESTS=OFF \
+ -DNATIVE_BUILD=OFF \
+ -DSTATIC_LINK=ON \
+ -DWITH_SYSTEMD=OFF \
+ -DFORCE_OXENMQ_SUBMODULE=ON \
+ -DSUBMODULE_CHECK=OFF \
+ -DWITH_LTO=OFF \
+ -DCMAKE_BUILD_TYPE=Release \
+ $@ $root
+ make lokinet-android -j${JOBS:-$(nproc)}
+ cp jni/liblokinet-android.so $out/$abi/liblokinet-android.so
+ cd -
+done
+tar -cvf $out $out.tar.xz
diff --git a/contrib/ci/drone-static-upload.sh b/contrib/ci/drone-static-upload.sh
index 50ae7912f..1dcaa9c1b 100755
--- a/contrib/ci/drone-static-upload.sh
+++ b/contrib/ci/drone-static-upload.sh
@@ -39,11 +39,10 @@ if [ -e daemon/lokinet.exe ]; then
# zipit up yo
archive="$base.zip"
zip -r "$archive" "$base"
-elif [ -e build/outputs/apk/debug/lokinet-debug.apk ] ; then
+elif [ -e build-android ] ; then
# android af ngl
- cp -av build/outputs/apk/debug/lokinet-debug.apk "$base"
archive="$base.tar.xz"
- tar cJvf "$archive" "$base"
+ cp -av build-android/lokinet-android-*.tar.xz "$archive"
else
cp -av daemon/lokinet daemon/lokinet-vpn ../lokinet-bootstrap "$base"
# tar dat shiz up yo
@@ -73,4 +72,3 @@ SFTP
set +o xtrace
echo -e "\n\n\n\n\e[32;1mUploaded to https://${upload_to}/${archive}\e[0m\n\n\n"
-
diff --git a/contrib/windows.sh b/contrib/windows.sh
index 99c814590..c1224afe1 100755
--- a/contrib/windows.sh
+++ b/contrib/windows.sh
@@ -4,7 +4,7 @@ set +x
mkdir -p build-windows
cd build-windows
cmake \
- -G Ninja \
+ -G 'Unix Makefiles' \
-DCMAKE_EXE_LINKER_FLAGS=-fstack-protector \
-DCMAKE_CXX_FLAGS=-fdiagnostics-color=always\
-DCMAKE_TOOLCHAIN_FILE=../contrib/cross/mingw64.cmake\
@@ -22,4 +22,4 @@ cmake \
-DWITH_LTO=OFF \
-DCMAKE_BUILD_TYPE=Release \
$@ ..
-ninja package
+make package -j${JOBS:-$(nproc)}
diff --git a/android/src/network/loki/lokinet/LokinetConfig.java b/jni/java/src/network/loki/lokinet/LokinetConfig.java
similarity index 100%
rename from android/src/network/loki/lokinet/LokinetConfig.java
rename to jni/java/src/network/loki/lokinet/LokinetConfig.java
diff --git a/android/src/network/loki/lokinet/LokinetDaemon.java b/jni/java/src/network/loki/lokinet/LokinetDaemon.java
similarity index 100%
rename from android/src/network/loki/lokinet/LokinetDaemon.java
rename to jni/java/src/network/loki/lokinet/LokinetDaemon.java