QT Android: Can't create android service in separate .so

1.2k Views Asked by At

I was able to find a code that creates a service for android using Qt in this link: https://github.com/bbernhard/qtandroidservices_example

However, when i tried to put the service code in another .so file using this link: https://www.kdab.com/qt-android-create-android-service-using-qt/

I no longer see the service running in the background of my android device! And i can't find answers for this problem anywhere. If someone can figure out the problem in my code or share a running sample code that would be great!

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>

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

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();
}
1

There are 1 best solutions below

0
On

I had the same problem. I had to add the resulting server library to the Android APK. I added it in the project settings in QtCreator under Build/Build Android APK/Additional Libraries and selected the create so file.