There was a discussion about this a while back into Slack QtMob into the 
Android channel:



my android.pri now include the right manifest based on the build version:



       MANIFEST_ANDROID_AMOTUS = AndroidManifest.xml



        LIBS_ANDROID_AMOTUS = libs.xml



        versionAtLeast(QT_VERSION, 5.13.0) {

            AMOTUS_ANDROID_MANIFEST_FOLDER = "android-src/"

            AMOTUS_ANDROID_LIBS_FOLDER = "android-src/res/values/"

        }



        !versionAtLeast(QT_VERSION, 5.13.0) {

            AMOTUS_ANDROID_MANIFEST_FOLDER = "android-src/old"

            AMOTUS_ANDROID_LIBS_FOLDER = "android-src/res/values/old"

        }



        QMAKE_EXTRA_TARGETS += $$androidSourceMaker("Amotus_Android_Manifest", 
"/", $$AMOTUS_ROOT, $$AMOTUS_ANDROID_MANIFEST_FOLDER, MANIFEST_ANDROID_AMOTUS)

        QMAKE_EXTRA_TARGETS += $$androidSourceMaker("Amotus_Android_Libs", 
"res/values", $$AMOTUS_ROOT, $$AMOTUS_ANDROID_LIBS_FOLDER, LIBS_ANDROID_AMOTUS)



        DISTFILES += \

            $$AMOTUS_ANDROID_MANIFEST_FOLDER/AndroidManifest.xml \

            $$AMOTUS_ANDROID_LIBS_FOLDER/libs.xml \





The androidSourceMaker is based on Luke Vear work: 
https://github.com/lukevear/qmakeAndroidSourcesHelper

This allow to cherry pick part of code and happend it to the android source 
folder, this allow multiple subrepos contributing to the android source folder 
(we can only have one, which is limiting we you keep a lots of sub repos into 
your projects).



Here is my source for it (I did sent it to Luke Vear already, but our needs 
diverge, I should open source fork it, but it is right now into a private 
repos):



# CopyAndroidSources.pri

# MIT License

#

# Copyright (c) 2018 Luke Vear

#

# Permission is hereby granted, free of charge, to any person obtaining a copy

# of this software and associated documentation files (the "Software"), to deal

# in the Software without restriction, including without limitation the rights

# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

# copies of the Software, and to permit persons to whom the Software is

# furnished to do so, subject to the following conditions:

#

# The above copyright notice and this permission notice shall be included in all

# copies or substantial portions of the Software.

#

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE

# SOFTWARE.

#

#

# Taken from https://github.com/lukevear/qmakeAndroidSourcesHelper

# commit e0e47e0d0f1b70bedcc9e31e9f8b217e027d3a54

#

# Modification is as follow

# 2018-06-01 JG remove the .gitignore section, not needed

# 2018-06-01 JG return with more export

# 2018-06-01 JG Add FORCE depends for created target



defineReplace(copyAndroidSources) {

    commandAlias = $$1

    targetDirectory = $$2

    sourceFiles = $$3



    # Ensure we were provided a valid alias for this command

    isEmpty(commandAlias) {

        error("copyAndroidSources requires a valid command alias as its first 
argument.")

    }



    # Ensure we were provided a valid target directory

    isEmpty(targetDirectory) {

        error("copyAndroidSources requires a valid target directory path as its 
second argument.")

    }



    # Ensure we were provide a valid set of source files

    isEmpty(sourceFiles) {

        error("copyAndroidSources requires a valid set of files as its third 
argument.")

    }



    # Make sure the command is run, TODO godboutj 2018-06-01, this should be 
depends on used files instead

    $${commandAlias}.depends += FORCE



    # Create the target directory

# Work around problem with Windows that cannot make or on command and syntaxt 
is not the same with Windows and other *nix system

contains(QMAKE_HOST.os, Windows) {

    $${commandAlias}.commands += $$escape_expand(\n\t)$(CHK_DIR_EXISTS) 
$$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/$$targetDirectory) $(MKDIR) 
$$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/$$targetDirectory)

} else {

    $${commandAlias}.commands += $$escape_expand(\n\t)$(CHK_DIR_EXISTS) 
$$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/$$targetDirectory) || $(MKDIR) 
$$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/$$targetDirectory)

}

    # Process each file that we were provided

    for(fileName, sourceFiles) {

        # Copy the file from the source directory to the target directory

        $${commandAlias}.commands += $$escape_expand(\n\t)$(COPY_FILE) 
$$shell_path($$fileName) 
$$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/$$targetDirectory/$$basename(fileName))

    }



    # We need to make our new command globally available so that qmake can add 
it to the generated Makefile

    export($${commandAlias}.commands)

    export($${commandAlias}.depends)



    # To ensure our command is run before compilation occurs we add our command 
to the dependency tree of 'first' (creating the tree if required)

    isEmpty(first.depends) {

        first.depends = $(first) $${commandAlias}

        export(first.depends)

       return(first $${commandAlias})

    }

    first.depends += $${commandAlias}

    export(first.depends)

    return($${commandAlias})

}



################################33

# Inside Android.pri



include(CopyAndroidSources.pri)



    defineReplace(androidPathMaker) {

        for(a, $$3) {

            result += $$1/$$2/$${a}

        }

        return($$result)

    }



    defineReplace(androidSourceMaker) {

         return($$copyAndroidSources($$1, $$2, $$androidPathMaker($$3, $$4, 
$$5)))

    }





-----------------------

begin discussion

----------------------------------------------


anybody have some weird injection of permission and requirements into the 
android manifest? seem like Qt inject 3 permission no matter if they are 
already present into the AndroidManifest, then the compile fail with duplicated 
entry?!? why is he injecting :

  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-feature android:name="android.hardware.location.gps" 
android:required="false" />
Is Qt 5.15 need those?  I do use the  gps location into my application, any way 
to prevent him for injecting those value? it corrupt the 
AndroidManifest.xmlAlso the

<meta-data android:name="android.app.load_local_libs" android:value="-- 
%%INSERT_LOCAL_LIBS%% --"/>
doesn’t get filled, do we still need this or change the value into our 
AndroidManifest.xml? (edited)
1:22<https://qtmob.slack.com/archives/C204H1U11/p1591032140053500>
oh, into the GUI when editing the AndroidManifest.xml into QtCreator you get 2 
checkbox to include default, I normally edit my AndroidManifest.xml into 
textEditor, I did not see it, it does remove the comment part :

    <!-- %%INSERT_PERMISSIONS -->
    <!-- %%INSERT_FEATURES -->
Seem like we need to remove the comments now to prevent QtCreator to inject
Screen Shot 2020-06-01 at 1.20.19 PM.png
<https://files.slack.com/files-pri/T09PZTN5A-F01500C8D6D/screen_shot_2020-06-01_at_1.20.19_pm.png>
<https://files.slack.com/files-pri/T09PZTN5A-F01500C8D6D/screen_shot_2020-06-01_at_1.20.19_pm.png>[cid:image006.png@01D68823.23F044B0]<https://files.slack.com/files-pri/T09PZTN5A-F01500C8D6D/screen_shot_2020-06-01_at_1.20.19_pm.png>

1:25<https://qtmob.slack.com/archives/C204H1U11/p1591032312055300>
still have some question about:

<meta-data android:name="android.app.load_local_libs" android:value="-- 
%%INSERT_LOCAL_LIBS%% --"/>
I guess this is useless now?! in 5.12 it resolve to:

<meta-data android:name="android.app.load_local_libs" 
android:value="plugins/platforms/android/libqtforandroid.so:plugins/bearer/libqandroidbearer.so:plugins/position/libqtposition_android.so:lib/libQt5QuickParticles.so"/>
same AndroidManifest.xml Source
[cid:image002.jpg@01D6881E.EF29AA90]
Jerome Godbout<https://app.slack.com/team/U8XG6B6QL>  1:32 
PM<https://qtmob.slack.com/archives/C204H1U11/p1591032763057300>
and

<meta-data android:name="android.app.load_local_libs_resource_id" 
android:resource="@array/load_local_libs"/>
is not backward compatible with 5.12, do we really need 2 different 
AndroidManifest to support both 5.12 and 5.15 now? That’s annoying, We will 
need to maintain 2 version of the file or is there an easy way to merge that 
rules before the build (inject either depending on Qt version?
[cid:image003.png@01D6881E.EF29AA90]
ekkescorner<https://app.slack.com/team/U4MCM14AG>  1:51 
PM<https://qtmob.slack.com/archives/C204H1U11/p1591033889058300>
@Jerome Godbout<https://qtmob.slack.com/team/U8XG6B6QL> have not tried it yet 
but it seems we need 2 different manifest versions for 5.14/5.15 and 5.12/5.13
https://stackoverflow.com/questions/61097966/qt-on-android-runtime-error-invalid-package-identifier-when-getting-bag-for-res/62108461#62108461
and https://bugreports.qt.io/browse/QTBUG-80444 (edited)
[Stack Overflow]Stack Overflow
Qt on Android Runtime error: Invalid package identifier when getting bag for 
resource number 
0x00000000<https://stackoverflow.com/questions/61097966/qt-on-android-runtime-error-invalid-package-identifier-when-getting-bag-for-res/62108461#62108461>
I am getting this strange error after updating my Qt version from 5.13.1 to 
5.14.2 and I am not sure what is the cause of it (I also updated my gradle 
version from 4.1.0 to 5.5.1). The error give the
[cid:image002.jpg@01D6881E.EF29AA90]
Jerome Godbout<https://app.slack.com/team/U8XG6B6QL>  2:31 
PM<https://qtmob.slack.com/archives/C204H1U11/p1591036316059700>
seem like it. I was wondering if any XML cross platform tool to merge xml into 
qmake was possible?? maybe an XSLT to modify the AndroidManifest based on Qt 
version would be nice.
[cid:image002.jpg@01D6881E.EF29AA90]
Jerome Godbout<https://app.slack.com/team/U8XG6B6QL>  4:39 
PM<https://qtmob.slack.com/archives/C204H1U11/p1591043978060300>
seems to be working, I did a check and copy the right manifest when building 
depending on the Qt version. thanks





-----Original Message-----
From: Interest <interest-boun...@qt-project.org> On Behalf Of Alexander Dyagilev
Sent: September 11, 2020 8:32 AM
To: Markus Haberlander <markus.haberlander...@gmail.com>; ekke 
<e...@ekkes-corner.org>
Cc: Qt Interest <interest@qt-project.org>
Subject: Re: [Interest] No implementation found for boolean 
org.qtproject.qt5.android.QtNative.startQtAndroidPlugin



Thanks. This + https://wiki.qt.io/AndroidServices helped.



On 9/11/2020 2:19 PM, Markus Haberlander wrote:

> Have a look at  https://wiki.qt.io/Qt_for_Android_known_issues :

>

> In order to work with Qt 5.14.0 and later releases, the

> AndroidManifest.xml generated for older versions has to be updated.

> This can be done either by replacing the manifest automatically using

> Qt Creator, or by manually editing the manifest. An example of the

> modifications needed can be found in

> https://codereview.qt-project.org/c/qt/qtandroidextras/+/278987

>

>

_______________________________________________

Interest mailing list

Interest@qt-project.org<mailto:Interest@qt-project.org>

https://lists.qt-project.org/listinfo/interest
_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to