mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
retroshare-service now build and runs fine on android (even older ones)
This commit is contained in:
parent
1d8bb44811
commit
b28512b889
@ -252,3 +252,4 @@ your work-station running
|
|||||||
- link:https://source.android.com/devices/tech/debug/gdb[]
|
- link:https://source.android.com/devices/tech/debug/gdb[]
|
||||||
- link:https://fw4spl-org.github.io/fw4spl-blog/2015/07/27/Native-debugging-on-Android-with-QtCreator.html[]
|
- link:https://fw4spl-org.github.io/fw4spl-blog/2015/07/27/Native-debugging-on-Android-with-QtCreator.html[]
|
||||||
- link:https://fragglet.livejournal.com/19646.html[]
|
- link:https://fragglet.livejournal.com/19646.html[]
|
||||||
|
- link:https://github.com/android-ndk/ndk/issues/773[How to build without using standalone toolchain?]
|
||||||
|
@ -14,7 +14,7 @@ function define_default_value()
|
|||||||
## You are supposed to provide the following variables according to your system setup
|
## You are supposed to provide the following variables according to your system setup
|
||||||
define_default_value ANDROID_NDK_PATH "/opt/android-ndk/"
|
define_default_value ANDROID_NDK_PATH "/opt/android-ndk/"
|
||||||
define_default_value ANDROID_NDK_ARCH "arm"
|
define_default_value ANDROID_NDK_ARCH "arm"
|
||||||
define_default_value ANDROID_PLATFORM_VER "21"
|
define_default_value ANDROID_PLATFORM_VER "16"
|
||||||
define_default_value NATIVE_LIBS_TOOLCHAIN_PATH "${HOME}/Builds/android-toolchains/retroshare-android-${ANDROID_PLATFORM_VER}-${ANDROID_NDK_ARCH}/"
|
define_default_value NATIVE_LIBS_TOOLCHAIN_PATH "${HOME}/Builds/android-toolchains/retroshare-android-${ANDROID_PLATFORM_VER}-${ANDROID_NDK_ARCH}/"
|
||||||
define_default_value HOST_NUM_CPU $(nproc)
|
define_default_value HOST_NUM_CPU $(nproc)
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ define_default_value LIBUPNP_SOURCE_VERSION "1.6.25"
|
|||||||
define_default_value LIBUPNP_SOURCE_SHA256 c5a300b86775435c076d58a79cc0d5a977d76027d2a7d721590729b7f369fa43
|
define_default_value LIBUPNP_SOURCE_SHA256 c5a300b86775435c076d58a79cc0d5a977d76027d2a7d721590729b7f369fa43
|
||||||
|
|
||||||
define_default_value INSTALL_QT_ANDROID "false"
|
define_default_value INSTALL_QT_ANDROID "false"
|
||||||
define_default_value QT_VERSION "5.9.6"
|
define_default_value QT_VERSION "5.12.0"
|
||||||
define_default_value QT_ANDROID_INSTALLER_SHA256 a214084e2295c9a9f8727e8a0131c37255bf724bfc69e80f7012ba3abeb1f763
|
define_default_value QT_ANDROID_INSTALLER_SHA256 a214084e2295c9a9f8727e8a0131c37255bf724bfc69e80f7012ba3abeb1f763
|
||||||
|
|
||||||
define_default_value RESTBED_SOURCE_VERSION "4.6"
|
define_default_value RESTBED_SOURCE_VERSION "4.6"
|
||||||
@ -95,6 +95,15 @@ build_toolchain()
|
|||||||
${ANDROID_NDK_PATH}/build/tools/make_standalone_toolchain.py --verbose \
|
${ANDROID_NDK_PATH}/build/tools/make_standalone_toolchain.py --verbose \
|
||||||
--arch ${ANDROID_NDK_ARCH} --install-dir ${NATIVE_LIBS_TOOLCHAIN_PATH} \
|
--arch ${ANDROID_NDK_ARCH} --install-dir ${NATIVE_LIBS_TOOLCHAIN_PATH} \
|
||||||
--api ${ANDROID_PLATFORM_VER}
|
--api ${ANDROID_PLATFORM_VER}
|
||||||
|
find "${PREFIX}/include/" -not -type d > "${NATIVE_LIBS_TOOLCHAIN_PATH}/deletefiles"
|
||||||
|
}
|
||||||
|
|
||||||
|
## This avoid <cmath> include errors due to -isystem and -I ordering issue
|
||||||
|
delete_copied_includes()
|
||||||
|
{
|
||||||
|
cat "${NATIVE_LIBS_TOOLCHAIN_PATH}/deletefiles" | while read delFile ; do
|
||||||
|
rm "$delFile"
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
## More information available at https://gitlab.com/relan/provisioners/merge_requests/1 and http://stackoverflow.com/a/34032216
|
## More information available at https://gitlab.com/relan/provisioners/merge_requests/1 and http://stackoverflow.com/a/34032216
|
||||||
@ -230,7 +239,8 @@ build_openssl()
|
|||||||
# sed -i '/LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \\/d' Makefile
|
# sed -i '/LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \\/d' Makefile
|
||||||
make -j${HOST_NUM_CPU}
|
make -j${HOST_NUM_CPU}
|
||||||
make install
|
make install
|
||||||
# cp *.so "${SYSROOT}/usr/lib"
|
rm -f ${PREFIX}/lib/libssl.so*
|
||||||
|
rm -f ${PREFIX}/lib/libcrypto.so*
|
||||||
cd ..
|
cd ..
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -315,9 +325,10 @@ build_restbed()
|
|||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
rm -rf restbed-build; mkdir restbed-build ; cd restbed-build
|
rm -rf restbed-build; mkdir restbed-build ; cd restbed-build
|
||||||
cmake -DBUILD_SSL=OFF -DCMAKE_INSTALL_PREFIX=${PREFIX} -B. -H../restbed
|
cmake -DBUILD_SSL=OFF -DCMAKE_INSTALL_PREFIX="${PREFIX}" -B. -H../restbed
|
||||||
make -j${HOST_NUM_CPU}
|
make -j${HOST_NUM_CPU}
|
||||||
make install
|
make install
|
||||||
|
cp "${PREFIX}/library/librestbed.a" "${PREFIX}/lib/"
|
||||||
cd ..
|
cd ..
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -329,6 +340,7 @@ build_sqlite
|
|||||||
build_sqlcipher
|
build_sqlcipher
|
||||||
build_libupnp
|
build_libupnp
|
||||||
build_rapidjson
|
build_rapidjson
|
||||||
#build_restbed # qmake build it already
|
build_restbed
|
||||||
|
delete_copied_includes
|
||||||
|
|
||||||
echo NATIVE_LIBS_TOOLCHAIN_PATH=${NATIVE_LIBS_TOOLCHAIN_PATH}
|
echo NATIVE_LIBS_TOOLCHAIN_PATH=${NATIVE_LIBS_TOOLCHAIN_PATH}
|
||||||
|
@ -881,6 +881,7 @@ rs_jsonapi {
|
|||||||
WRAPPERS_INCL_FILE=$$clean_path($${JSONAPI_GENERATOR_OUT}/jsonapi-includes.inl)
|
WRAPPERS_INCL_FILE=$$clean_path($${JSONAPI_GENERATOR_OUT}/jsonapi-includes.inl)
|
||||||
WRAPPERS_REG_FILE=$$clean_path($${JSONAPI_GENERATOR_OUT}/jsonapi-wrappers.inl)
|
WRAPPERS_REG_FILE=$$clean_path($${JSONAPI_GENERATOR_OUT}/jsonapi-wrappers.inl)
|
||||||
|
|
||||||
|
no_rs_cross_compiling {
|
||||||
restbed.target = $$clean_path($${RESTBED_BUILD_PATH}/library/librestbed.a)
|
restbed.target = $$clean_path($${RESTBED_BUILD_PATH}/library/librestbed.a)
|
||||||
restbed.commands = \
|
restbed.commands = \
|
||||||
cd $${RS_SRC_PATH};\
|
cd $${RS_SRC_PATH};\
|
||||||
@ -896,6 +897,7 @@ rs_jsonapi {
|
|||||||
QMAKE_EXTRA_TARGETS += restbed
|
QMAKE_EXTRA_TARGETS += restbed
|
||||||
libretroshare.depends += restbed
|
libretroshare.depends += restbed
|
||||||
PRE_TARGETDEPS *= $${restbed.target}
|
PRE_TARGETDEPS *= $${restbed.target}
|
||||||
|
}
|
||||||
|
|
||||||
PRE_TARGETDEPS *= $${JSONAPI_GENERATOR_EXE}
|
PRE_TARGETDEPS *= $${JSONAPI_GENERATOR_EXE}
|
||||||
INCLUDEPATH *= $${JSONAPI_GENERATOR_OUT}
|
INCLUDEPATH *= $${JSONAPI_GENERATOR_OUT}
|
||||||
@ -968,12 +970,6 @@ test_bitdht {
|
|||||||
################################# Android #####################################
|
################################# Android #####################################
|
||||||
|
|
||||||
android-* {
|
android-* {
|
||||||
## ifaddrs is missing on Android to add them don't use the one from
|
|
||||||
## https://github.com/morristech/android-ifaddrs
|
|
||||||
## because it crash, use QNetworkInterface from Qt instead
|
|
||||||
CONFIG *= qt
|
|
||||||
QT *= network
|
|
||||||
|
|
||||||
DEFINES *= "fopen64=fopen"
|
DEFINES *= "fopen64=fopen"
|
||||||
DEFINES *= "fseeko64=fseeko"
|
DEFINES *= "fseeko64=fseeko"
|
||||||
DEFINES *= "ftello64=ftello"
|
DEFINES *= "ftello64=ftello"
|
||||||
|
@ -50,14 +50,17 @@ dLibs =
|
|||||||
rs_jsonapi {
|
rs_jsonapi {
|
||||||
RS_SRC_PATH=$$clean_path($${PWD}/../../)
|
RS_SRC_PATH=$$clean_path($${PWD}/../../)
|
||||||
RS_BUILD_PATH=$$clean_path($${OUT_PWD}/../../)
|
RS_BUILD_PATH=$$clean_path($${OUT_PWD}/../../)
|
||||||
|
|
||||||
|
no_cross_compiling {
|
||||||
RESTBED_SRC_PATH=$$clean_path($${RS_SRC_PATH}/supportlibs/restbed)
|
RESTBED_SRC_PATH=$$clean_path($${RS_SRC_PATH}/supportlibs/restbed)
|
||||||
RESTBED_BUILD_PATH=$$clean_path($${RS_BUILD_PATH}/supportlibs/restbed)
|
RESTBED_BUILD_PATH=$$clean_path($${RS_BUILD_PATH}/supportlibs/restbed)
|
||||||
|
|
||||||
INCLUDEPATH *= $$clean_path($${RESTBED_BUILD_PATH}/include/)
|
INCLUDEPATH *= $$clean_path($${RESTBED_BUILD_PATH}/include/)
|
||||||
QMAKE_LIBDIR *= $$clean_path($${RESTBED_BUILD_PATH}/library/)
|
QMAKE_LIBDIR *= $$clean_path($${RESTBED_BUILD_PATH}/library/)
|
||||||
# Using sLibs would fail as librestbed.a is generated at compile-time
|
# Using sLibs would fail as librestbed.a is generated at compile-time
|
||||||
LIBS *= -L$$clean_path($${RESTBED_BUILD_PATH}/library/) -lrestbed
|
LIBS *= -L$$clean_path($${RESTBED_BUILD_PATH}/library/) -lrestbed
|
||||||
win32-g++:LIBS += -lwsock32
|
} else:sLibs *= restbed
|
||||||
|
|
||||||
|
win32-g++:dLibs *= wsock32
|
||||||
}
|
}
|
||||||
|
|
||||||
linux-* {
|
linux-* {
|
||||||
@ -79,3 +82,11 @@ LIBS += $$linkStaticLibs(sLibs)
|
|||||||
PRE_TARGETDEPS += $$pretargetStaticLibs(sLibs)
|
PRE_TARGETDEPS += $$pretargetStaticLibs(sLibs)
|
||||||
|
|
||||||
LIBS += $$linkDynamicLibs(dLibs)
|
LIBS += $$linkDynamicLibs(dLibs)
|
||||||
|
|
||||||
|
android-* {
|
||||||
|
## ifaddrs is missing on Android to add them don't use the one from
|
||||||
|
## https://github.com/morristech/android-ifaddrs
|
||||||
|
## because it crash, use QNetworkInterface from Qt instead
|
||||||
|
CONFIG *= qt
|
||||||
|
QT *= network
|
||||||
|
}
|
||||||
|
BIN
retroshare-service/data/retroshare-service_128x128.png
Normal file
BIN
retroshare-service/data/retroshare-service_128x128.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.0 KiB |
BIN
retroshare-service/data/retroshare-service_48x48.png
Normal file
BIN
retroshare-service/data/retroshare-service_48x48.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
@ -1,13 +1,34 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<manifest package="org.retroshare.android.qml_app" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.6.4" android:versionCode="1" android:installLocation="auto">
|
<manifest
|
||||||
<application android:name="org.qtproject.qt5.android.bindings.QtApplication" android:hardwareAccelerated="true" android:label="RetroShare" android:icon="@drawable/retroshare_128x128">
|
package="org.retroshare.service"
|
||||||
<activity android:label="">
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
<meta-data android:name="android.app.lib_name" android:value=""/>
|
android:versionName="0.6.4" android:versionCode="1"
|
||||||
|
android:installLocation="auto">
|
||||||
|
<application android:name="org.qtproject.qt5.android.bindings.QtApplication" android:hardwareAccelerated="true" android:label="RetroShare" android:icon="@drawable/retroshare_service_128x128">
|
||||||
|
<activity
|
||||||
|
android:name=".RetroShareServiceControlActivity"
|
||||||
|
android:label="RetroShare" >
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
<receiver android:name=".BootCompletedReceiver" android:enabled="true">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.BOOT_COMPLETED"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
|
||||||
|
<receiver android:name=".AppUpdatedReceiver" android:enabled="true">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
|
||||||
<!-- For adding service(s) please check:
|
<!-- For adding service(s) please check:
|
||||||
++ https://wiki.qt.io/AndroidServices -->
|
++ https://wiki.qt.io/AndroidServices -->
|
||||||
<service android:name=".RetroShareService" android:process=":rs" android:label="RetroShare Service" android:exported="true">
|
<service android:name=".RetroShareServiceAndroid" android:process=":rs" android:label="RetroShare Service" android:exported="true">
|
||||||
<!-- android:exported="true" Added to be able to run the service
|
<!-- android:exported="true" Added to be able to run the service
|
||||||
++ from adb shell
|
++ from adb shell
|
||||||
++ android:process=":rs" is needed to force the service to run on
|
++ android:process=":rs" is needed to force the service to run on
|
||||||
@ -16,16 +37,26 @@
|
|||||||
<!-- Qt Application to launch -->
|
<!-- Qt Application to launch -->
|
||||||
<meta-data android:name="android.app.lib_name" android:value="retroshare-service"/>
|
<meta-data android:name="android.app.lib_name" android:value="retroshare-service"/>
|
||||||
|
|
||||||
|
<!-- Ministro -->
|
||||||
|
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
|
||||||
|
<meta-data android:name="android.app.repository" android:value="default"/>
|
||||||
|
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
|
||||||
|
<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
|
||||||
<!-- Deploy Qt libs as part of package -->
|
<!-- Deploy Qt libs as part of package -->
|
||||||
<meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
|
<meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
|
||||||
<meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
|
<meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
|
||||||
<meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
|
<meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
|
||||||
|
<!-- Run with local libs -->
|
||||||
<!-- Messages maps BEGIN -->
|
<meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
|
||||||
|
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
|
||||||
|
<meta-data android:name="android.app.load_local_libs" android:value="-- %%INSERT_LOCAL_LIBS%% --"/>
|
||||||
|
<meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
|
||||||
|
<meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/>
|
||||||
|
<!-- Messages maps -->
|
||||||
<meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
|
<meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
|
||||||
<meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
|
<meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
|
||||||
<meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
|
<meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
|
||||||
<!-- Messages maps END -->
|
<!-- Messages maps -->
|
||||||
|
|
||||||
<!-- Background running -->
|
<!-- Background running -->
|
||||||
<meta-data android:name="android.app.background_running" android:value="true"/>
|
<meta-data android:name="android.app.background_running" android:value="true"/>
|
||||||
@ -33,7 +64,7 @@
|
|||||||
</service>
|
</service>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="21"/>
|
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="18"/>
|
||||||
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
|
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
|
||||||
|
|
||||||
<!-- The following comment will be replaced upon deployment with default
|
<!-- The following comment will be replaced upon deployment with default
|
||||||
|
@ -1 +0,0 @@
|
|||||||
../../../../../data/128x128/apps/retroshare.png
|
|
@ -1 +0,0 @@
|
|||||||
../../../../../data/48x48/apps/retroshare.png
|
|
@ -0,0 +1 @@
|
|||||||
|
../../../../data/retroshare-service_128x128.png
|
@ -0,0 +1 @@
|
|||||||
|
../../../../data/retroshare-service_48x48.png
|
@ -0,0 +1,11 @@
|
|||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:orientation="vertical" >
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/startStopButton" android:text="Stop"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* RetroShare
|
||||||
|
* Copyright (C) 2016-2018 Gioacchino Mazzurco <gio@eigenlab.org>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.retroshare.service;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
public class AppUpdatedReceiver extends BroadcastReceiver
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent)
|
||||||
|
{
|
||||||
|
Log.i("AppUpdatedReceiver", "onReceive() Restarting RetroShare Service After Update");
|
||||||
|
RetroShareServiceAndroid.stop(context);
|
||||||
|
RetroShareServiceAndroid.start(context);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* RetroShare
|
||||||
|
* Copyright (C) 2016-2018 Gioacchino Mazzurco <gio@eigenlab.org>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.retroshare.service;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
public class BootCompletedReceiver extends BroadcastReceiver
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent)
|
||||||
|
{
|
||||||
|
Log.i("BootCompletedReceiver", "onReceive() Starting RetroShare Service on boot");
|
||||||
|
RetroShareServiceAndroid.start(context);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* RetroShare
|
||||||
|
* Copyright (C) 2016-2018 Gioacchino Mazzurco <gio@eigenlab.org>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.retroshare.service;
|
||||||
|
|
||||||
|
import android.app.ActivityManager;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
|
||||||
|
import org.qtproject.qt5.android.bindings.QtService;
|
||||||
|
|
||||||
|
public class RetroShareServiceAndroid extends QtService
|
||||||
|
{
|
||||||
|
public static void start(Context ctx)
|
||||||
|
{
|
||||||
|
ctx.startService(new Intent(ctx, RetroShareServiceAndroid.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void stop(Context ctx)
|
||||||
|
{
|
||||||
|
ctx.stopService(new Intent(ctx, RetroShareServiceAndroid.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isRunning(Context ctx)
|
||||||
|
{
|
||||||
|
ActivityManager manager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
|
||||||
|
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE))
|
||||||
|
if (RetroShareServiceAndroid.class.getName().equals(service.service.getClassName()))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* RetroShare
|
||||||
|
* Copyright (C) 2016-2018 Gioacchino Mazzurco <gio@eigenlab.org>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.retroshare.service;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.Button;
|
||||||
|
import org.retroshare.service.R;
|
||||||
|
|
||||||
|
|
||||||
|
public class RetroShareServiceControlActivity extends Activity
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState)
|
||||||
|
{
|
||||||
|
setContentView(R.layout.retroshare_service_control_layout);
|
||||||
|
|
||||||
|
final Button button = (Button) findViewById(R.id.startStopButton);
|
||||||
|
button.setOnClickListener(new View.OnClickListener()
|
||||||
|
{
|
||||||
|
public void onClick(View v)
|
||||||
|
{
|
||||||
|
if (RetroShareServiceAndroid.isRunning(RetroShareServiceControlActivity.this))
|
||||||
|
{
|
||||||
|
RetroShareServiceAndroid.stop(RetroShareServiceControlActivity.this);
|
||||||
|
button.setText("Start");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RetroShareServiceAndroid.start(RetroShareServiceControlActivity.this);
|
||||||
|
button.setText("Stop");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume()
|
||||||
|
{
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
final Button button = (Button) findViewById(R.id.startStopButton);
|
||||||
|
button.setText(RetroShareServiceAndroid.isRunning(this) ? "Stop" : "Start");
|
||||||
|
}
|
||||||
|
}
|
@ -21,6 +21,10 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
|
#ifdef __ANDROID__
|
||||||
|
# include <QAndroidService>
|
||||||
|
#endif // def __ANDROID__
|
||||||
|
|
||||||
#include "retroshare/rsinit.h"
|
#include "retroshare/rsinit.h"
|
||||||
#include "retroshare/rsiface.h"
|
#include "retroshare/rsiface.h"
|
||||||
|
|
||||||
@ -36,9 +40,10 @@ int main(int argc, char* argv[])
|
|||||||
{
|
{
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
AndroidStdIOCatcher dbg; (void) dbg;
|
AndroidStdIOCatcher dbg; (void) dbg;
|
||||||
#endif
|
QAndroidService app(argc, argv);
|
||||||
|
#else // def __ANDROID__
|
||||||
QCoreApplication app(argc, argv);
|
QCoreApplication app(argc, argv);
|
||||||
|
#endif // def __ANDROID__
|
||||||
|
|
||||||
signal(SIGINT, QCoreApplication::exit);
|
signal(SIGINT, QCoreApplication::exit);
|
||||||
signal(SIGTERM, QCoreApplication::exit);
|
signal(SIGTERM, QCoreApplication::exit);
|
||||||
|
@ -10,6 +10,8 @@ QT -= gui
|
|||||||
SOURCES += retroshare-service.cc
|
SOURCES += retroshare-service.cc
|
||||||
|
|
||||||
android-* {
|
android-* {
|
||||||
|
QT += androidextras
|
||||||
|
|
||||||
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
|
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
|
||||||
|
|
||||||
DISTFILES += android/AndroidManifest.xml \
|
DISTFILES += android/AndroidManifest.xml \
|
||||||
@ -23,6 +25,7 @@ android-* {
|
|||||||
android/gradlew.bat
|
android/gradlew.bat
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
appimage {
|
appimage {
|
||||||
icon_files.path = "$${PREFIX}/share/icons/hicolor/scalable/"
|
icon_files.path = "$${PREFIX}/share/icons/hicolor/scalable/"
|
||||||
icon_files.files = ../data/retroshare-service.svg
|
icon_files.files = ../data/retroshare-service.svg
|
||||||
|
Loading…
Reference in New Issue
Block a user