[Solved][Qt][Android]How can i add my own (librarys)*.so files into apk and use them?
-
Hi, guys:
When i using Qt for Android to deploy an apk, I want to use my own librarys in the application, so I copy the *.so files into the folder "android\libs\armeabi-v7a". After deployment, I did find the so files in apk,but when i use QLibrary::load to load the librarys, it failed. anybody can help?
-
Actually this is exactly how it works. Copy the file into that folder. Im using opencv with Qt on android and needed the native camera lib in the apk. So I copied it there and now its in the apk/libs
Maybe you didnt check "Bundle Qt Libraries in APK" (Qt 5.1.1) -
So where can i find this check "Bundle Qt Libraries in APK"?
-
You need Qt5.1.1 for android, then go to your project's settings -> Run -> Deploy configurations -> Bundle Qt Libraries in APK
-
I use Qt 5.1.0 for android, it don't have that kind of check. But I don't think this is the way to solve my problem.
here is the details:
1、I use the default c++ library project created by the QtCreator as my lib;
2、I use the Qt Quick2 Application created by Creator as my mainApp;
3、I use QLibrary::Load in my mainApp to dynamic load the c++ library;
4、I copy the library to the folder "android/libs/armeabi-v7a";
5、Deploy the mainApp(now the library in the apk/libs/armeabi-v7a);
6、Install the mainApp in phone 、run it, and fail to load the library; -
Maybe this can help you: http://qt-project.org/forums/viewthread/29592
-
Thanks moster, I will have a try
-
The method http://qt-project.org/forums/viewthread/29592 provided did works!
Here is my conclusion:
To add your own library into android application with Qt for Android:
1、Copy your libraries into the folder "android/libs"2、If your application implicit dependent on the libraries, u have to modify the pro file, add " LIBS += -L"path of the lib" -llibname "
3、Modify "android/res/values/libs.xml".
Add the following:
@<array name="any_name_you_want">
<item>yourlibName</item>
</array>@4、Modify "androidManifest.xml"
replace the lines:
@<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>@
with
@<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/any_name_you_want"/>@The reason why we don't use bundled_libs to add our libraries is everytime we deploy the app, Qt will replace the bundled_libs in libs.xml with its own data, I don't know if this is a bug or something else.
5、Now it should be ok to load your libraries in app.
-
@erikalxq Where to place the header file (*.h) ?
-
@zappy-mans said in [Solved][Qt][Android]How can i add my own (librarys)*.so files into apk and use them?:
Where to place the header file (*.h) ?
Where you like.
Then use https://doc.qt.io/qt-6/qmake-variable-reference.html#includepath variable in your pro file to tell qmake where to find them.