Android Services: I can start a service using the same .so but i can't use a separate .so for the service code



  • Hi,
    I want to create an android service with its code in a separate .so file.

    I used this reference to start an android service with its code inside the same .so. successfully!
    https://github.com/bbernhard/qtandroidservices_example

    I followed this reference to make separate .so files but failed:
    https://www.kdab.com/qt-android-create-android-service-using-qt/

    Here's my code:

    Manifest: (only relevant lines)

    <manifest package="org.qtproject.example" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
        <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="-- %%INSERT_APP_NAME%% --">
            <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.example.MyCustomAppActivity" android:label="-- %%INSERT_APP_NAME%% --" android:screenOrientation="unspecified" android:launchMode="singleTop">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
                <meta-data android:name="android.app.lib_name" android:value="qtandroidservices_example"/>
        </activity>
    
        <service android:process=":qt" android:enabled="true" android:name="org.qtproject.example.MyCustomAppService">
    
    <meta-data android:name="android.app.lib_name" android:value="server"/>
    
                 <!-- Background running -->
                 <meta-data android:name="android.app.background_running" android:value="true"/>
                 <!-- Background running -->
             </service>
        </application>
    </manifest>
    

    =============================================================

    qtandroidservices_example.pro:

    TEMPLATE = app
    win32{
        QT += qml quick webview multimedia
    }
    android{
        QT += qml quick webview multimedia androidextras
    }
    CONFIG += c++11
    SOURCES += \
        source/cpp/main.cpp
    RESOURCES += qml.qrc
    # Default rules for deployment.
    include(deployment.pri)
    DISTFILES += \
        android/AndroidManifest.xml \
        android/gradle/wrapper/gradle-wrapper.jar \
        android/gradlew \
        android/res/values/libs.xml \
        android/build.gradle \
        android/gradle/wrapper/gradle-wrapper.properties \
        android/gradlew.bat \
        android/local.properties \
        source/java/MyBroadcastReceiver.java
    
    android {
        ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
        ANDROID_JAVA_SOURCES.path = /src/org/qtproject/example
        ANDROID_JAVA_SOURCES.files = $$files($$PWD/source/java/*.java)
        INSTALLS += ANDROID_JAVA_SOURCES
    }
    

    MyCustomAppActivity.java:

    package org.qtproject.example;
    import org.qtproject.example.R;
    import org.qtproject.qt5.android.bindings.QtActivity;
    import org.qtproject.qt5.android.bindings.QtService;
    import org.qtproject.example.MyCustomAppService;
    import android.content.Intent;
    import android.util.Log;
    import android.os.Bundle;
    
    public class MyCustomAppActivity extends QtActivity {
        @Override
        public void onCreate(Bundle bundle) {
            super.onCreate(bundle);
            Log.i("Activity", "Starting service!");
            Intent serviceIntent = new Intent(this, org.qtproject.example.MyCustomAppService.class);
            startService(serviceIntent);
        }
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
    

    =======================================================
    MyCustomService.java:

    package org.qtproject.example;
    import android.app.Service;
    import android.os.IBinder;
    import android.content.Intent;
    import android.os.Bundle;
    import org.qtproject.qt5.android.bindings.QtService;
    import android.util.Log;
    
    public class MyCustomAppService extends QtService {
    
       /** Called when the service is being created. */
       @Override
       public void onCreate() {
          Log.i("Service", "Service created!");
           super.onCreate();
    
       }
    
       /** The service is starting, due to a call to startService() */
       @Override
       public int onStartCommand(Intent intent, int flags, int startId) {
         Log.i("Service", "Service created!");
           int ret = super.onStartCommand(intent, flags, startId);
          return ret;
          //return mStartMode;
       }
    }
    

    ===================================================
    server.pro:

    TEMPLATE = lib
    TARGET = server
    CONFIG += dll
    QT += core
    SOURCES += \
        server.cpp
    

    ==================================================
    server.cpp:

    #include <QDebug>
    #ifdef Q_OS_ANDROID
    #include <QAndroidJniObject>
    #include <QtAndroid>
    #endif
    
    int main(int argc, char *argv[])
    {
        QGuiApplication app(argc, argv);
    
        qWarning("I am serving");
        return app.exec();
    }
    

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.