Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Custom android.permission defined in .PRO



  • Hello.

    I'm trying to create a custom build option for android permissions depending on the build needs.

    I figured I could use .PRO for this by adding ANDROID_PERMISSIONS, which at first didn't add the permission to AndroidManifest.xml, till I added <!-- %%INSERT_PERMISSIONS --> to AndroidManifest.xml.

    Now all custom permissions defined with ANDROID_PERMISSIONS are added, but... it adds even more, which is the issue.
    I compared the 2 manifest files, one with <!-- %%INSERT_PERMISSIONS --> and one without.

    Turn out, qt also adds:

    <     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <     <uses-permission android:name="android.permission.CAMERA"/>
    <     <uses-permission android:name="android.permission.INTERNET"/>
    

    My question is, how to make it not add that, since it's not defined anywhere? Or if it is defined, I can't find it where.


  • Moderators

    @Wiru I don't know for sure, but they may be added automatically, depending on your modules used 🤷‍♂️

    what do you add with QT += moduleName

    and have checked: Add necessary permission in the project settings? Those may be at fault as well 🤔



  • I guess that might be true,
    I have qml quick multimedia network quickcontrols2 sql websockets widgets

    So I guess it adds them by itself, which I wish it wouldn't because some are defined already

    I only ran a diff for the 2 files, reason it outputted this:

    <     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <     <uses-permission android:name="android.permission.CAMERA"/>
    <     <uses-permission android:name="android.permission.INTERNET"/>
    

    is because it added WRITE_EXTERNAL_STORAGE, ACCESS_NETWORK_STATE, INTERNET twice, once they are manually defined, and second is the automated one. so if I'd ignore the duplicates, only the CAMERA one is the issue. (ofc it would be nice if it didn't duplicate already existing permissions)

    I wanted to use this for CI, so it can be easily defined which additional permissions are needed for which project. Any other suggestion on how to handle it (I'd really love to skip patch files or script edits of manifest file)

    EDIT: where is the "Add necessary permission in the project settings", can't seem to find it under Projects > Build


  • Moderators

    @Wiru said in Custom android.permission defined in .PRO:

    EDIT: where is the "Add necessary permission in the project settings", can't seem to find it under Projects > Build

    actually, its inside the manifest.xml ui:
    cb1e7cff-8cf2-4920-bc2d-b0223b83b042-image.png

    I assume this is a setting in QtCreator/project.pro.user file

    Any other suggestion on how to handle it (I'd really love to skip patch files or script edits of manifest file

    Don't rely on the auto creation of the manifest file,
    make explicit (fixed) manifest files for your builds, and include them (in your pro) depending on the build.

    android {
    
    buildA: DISTFILES += builda/AndroidManifest.xml
    buildB: DISTFILES += buildb/AndroidManifest.xml
    


  • @J-Hilk said in Custom android.permission defined in .PRO:

    Don't rely on the auto creation of the manifest file,
    make explicit (fixed) manifest files for your builds, and include them (in your pro) depending on the build.

    This would require to have a complete manifest for each include? (which might be unnecessary)
    In my opinion it would be much better to just add permissions depending on needs, but I'll keep that as an option.

    For now I went the way I wanted to skip, writing a bash script to replace a placeholder in the manifest with needed permissions.


Log in to reply