hossain-khan / android-keep-alive

A simple app to keep alive specific apps
MIT License
4 stars 1 forks source link

Syncthing manifest #5

Open hossain-khan opened 2 weeks ago

hossain-khan commented 2 weeks ago
<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="4391"
    android:versionName="1.27.10"
    android:compileSdkVersion="34"
    android:compileSdkVersionCodename="14"
    package="com.nutomic.syncthingandroid"
    platformBuildVersionCode="34"
    platformBuildVersionName="14">

    <uses-sdk
        android:minSdkVersion="21"
        android:targetSdkVersion="33" />

    <uses-feature
        android:name="android.software.leanback"
        android:required="false" />

    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="false" />

    <uses-feature
        android:name="android.hardware.location.gps"
        android:required="false" />

    <uses-permission
        android:name="android.permission.POST_NOTIFICATIONS" />

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

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

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

    <uses-permission
        android:name="android.permission.ACCESS_WIFI_STATE" />

    <uses-permission
        android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <uses-permission
        android:name="android.permission.WAKE_LOCK" />

    <uses-permission
        android:name="android.permission.READ_SYNC_SETTINGS" />

    <uses-permission
        android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

    <uses-permission
        android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <uses-permission
        android:name="android.permission.FOREGROUND_SERVICE" />

    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION" />

    <uses-permission
        android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

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

    <uses-permission
        android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

    <uses-feature
        android:name="android.hardware.camera.front"
        android:required="false" />

    <uses-feature
        android:name="android.hardware.camera.autofocus"
        android:required="false" />

    <uses-feature
        android:name="android.hardware.camera.flash"
        android:required="false" />

    <uses-feature
        android:name="android.hardware.screen.landscape"
        android:required="false" />

    <uses-feature
        android:name="android.hardware.wifi"
        android:required="false" />

    <application
        android:theme="@ref/0x7f130267"
        android:label="@ref/0x7f12002a"
        android:icon="@ref/0x7f0f0003"
        android:name="com.nutomic.syncthingandroid.SyncthingApp"
        android:description="@ref/0x7f120029"
        android:allowBackup="false"
        android:installLocation="1"
        android:supportsRtl="true"
        android:banner="@ref/0x7f0f0001"
        android:fullBackupContent="false"
        android:appComponentFactory="androidx.core.app.CoreComponentFactory"
        android:requestLegacyExternalStorage="true">

        <activity
            android:label="@ref/0x7f12002a"
            android:name="com.nutomic.syncthingandroid.activities.FirstStartActivity"
            android:exported="true"
            android:launchMode="2">

            <intent-filter>

                <action
                    android:name="android.intent.action.MAIN" />

                <category
                    android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter>

                <action
                    android:name="android.intent.action.MAIN" />

                <category
                    android:name="android.intent.category.LEANBACK_LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:label="@ref/0x7f12002a"
            android:name="com.nutomic.syncthingandroid.activities.MainActivity"
            android:launchMode="2" />

        <activity
            android:label="@ref/0x7f12020e"
            android:name="com.nutomic.syncthingandroid.activities.WebGuiActivity"
            android:configChanges="0x4a0"
            android:parentActivityName="com.nutomic.syncthingandroid.activities.MainActivity">

            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".activities.MainActivity" />
        </activity>

        <activity
            android:label="@ref/0x7f12019f"
            android:name="com.nutomic.syncthingandroid.activities.ShareActivity"
            android:exported="true"
            android:taskAffinity=""
            android:excludeFromRecents="true"
            android:windowSoftInputMode="0x10">

            <intent-filter>

                <action
                    android:name="android.intent.action.SEND" />

                <category
                    android:name="android.intent.category.DEFAULT" />

                <data
                    android:mimeType="*/*" />
            </intent-filter>

            <intent-filter>

                <action
                    android:name="android.intent.action.SEND_MULTIPLE" />

                <category
                    android:name="android.intent.category.DEFAULT" />

                <data
                    android:mimeType="*/*" />
            </intent-filter>
        </activity>

        <activity
            android:name="com.nutomic.syncthingandroid.activities.LogActivity"
            android:exported="false"
            android:parentActivityName="com.nutomic.syncthingandroid.activities.SettingsActivity">

            <intent-filter>

                <action
                    android:name=".activities.LogActivity" />

                <category
                    android:name="android.intent.category.DEFAULT" />
            </intent-filter>

            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".activities.SettingsActivity" />
        </activity>

        <activity
            android:label="@ref/0x7f1200a2"
            android:name="com.nutomic.syncthingandroid.activities.FolderPickerActivity">

            <meta-data
                android:name="android.support.UI_OPTIONS"
                android:value="splitActionBarWhenNarrow" />
        </activity>

        <activity
            android:name="com.nutomic.syncthingandroid.activities.DeviceActivity"
            android:parentActivityName="com.nutomic.syncthingandroid.activities.MainActivity">

            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".activities.MainActivity" />
        </activity>

        <activity
            android:name="com.nutomic.syncthingandroid.activities.FolderActivity"
            android:parentActivityName="com.nutomic.syncthingandroid.activities.MainActivity">

            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".activities.MainActivity" />
        </activity>

        <activity
            android:name="com.nutomic.syncthingandroid.activities.SettingsActivity"
            android:parentActivityName="com.nutomic.syncthingandroid.activities.MainActivity">

            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".activities.MainActivity" />
        </activity>

        <service
            android:name="com.nutomic.syncthingandroid.service.SyncthingService" />

        <receiver
            android:name="com.nutomic.syncthingandroid.receiver.BootReceiver"
            android:exported="false">

            <intent-filter>

                <action
                    android:name="android.intent.action.BOOT_COMPLETED" />

                <action
                    android:name="android.intent.action.MY_PACKAGE_REPLACED" />
            </intent-filter>
        </receiver>

        <receiver
            android:name="com.nutomic.syncthingandroid.receiver.AppConfigReceiver"
            android:exported="true">

            <intent-filter>

                <action
                    android:name="com.nutomic.syncthingandroid.action.START" />

                <action
                    android:name="com.nutomic.syncthingandroid.action.STOP" />
            </intent-filter>
        </receiver>

        <activity
            android:theme="@ref/0x7f13026b"
            android:label="@ref/0x7f1200a6"
            android:name="com.nutomic.syncthingandroid.activities.FolderTypeDialogActivity"
            android:parentActivityName="com.nutomic.syncthingandroid.activities.FolderActivity">

            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.nutomic.syncthingandroid.activities.FolderActivity" />
        </activity>

        <activity
            android:theme="@ref/0x7f13026b"
            android:label="@ref/0x7f120165"
            android:name="com.nutomic.syncthingandroid.activities.PullOrderDialogActivity"
            android:parentActivityName="com.nutomic.syncthingandroid.activities.FolderActivity">

            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.nutomic.syncthingandroid.activities.FolderActivity" />
        </activity>

        <activity
            android:theme="@ref/0x7f13026b"
            android:label="@ref/0x7f120096"
            android:name="com.nutomic.syncthingandroid.activities.VersioningDialogActivity"
            android:parentActivityName="com.nutomic.syncthingandroid.activities.FolderActivity">

            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.nutomic.syncthingandroid.activities.FolderActivity" />
        </activity>

        <activity
            android:label="QR Code Scanner"
            android:name="com.nutomic.syncthingandroid.activities.QRScannerActivity"
            android:parentActivityName="com.nutomic.syncthingandroid.activities.DeviceActivity">

            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.nutomic.syncthingandroid.activities.DeviceActivity" />
        </activity>

        <activity
            android:theme="@ref/0x7f13045c"
            android:name="com.journeyapps.barcodescanner.CaptureActivity"
            android:clearTaskOnLaunch="true"
            android:stateNotNeeded="true"
            android:screenOrientation="6"
            android:windowSoftInputMode="0x3" />

        <provider
            android:name="androidx.startup.InitializationProvider"
            android:exported="false"
            android:authorities="com.nutomic.syncthingandroid.androidx-startup">

            <meta-data
                android:name="androidx.emoji2.text.EmojiCompatInitializer"
                android:value="androidx.startup" />

            <meta-data
                android:name="androidx.lifecycle.ProcessLifecycleInitializer"
                android:value="androidx.startup" />
        </provider>
    </application>
</manifest>
hossain-khan commented 1 week ago

In the AndroidManifest.xml file, you'll see that SyncthingService is declared as follows:

<service android:name=".SyncthingService"
    android:enabled="true" />

The issue here is that the service does not have an explicit <intent-filter> defined. This means that by default, the service is not exported, and its instance cannot be accessed from other applications.

To start SyncthingService from a different app, you need to make it exportable. You can do this by adding an <intent-filter> to the service declaration in AndroidManifest.xml:

<service android:name=".SyncthingService"
    android:enabled="true" >
    <intent-filter>
        <action android:name="com.example.SYNCHING_SERVICE_ACTION" />
    </intent-filter>
</service>

In this example, I've added an <intent-filter> with a custom action name com.example.SYNCHING_SERVICE_ACTION. You can replace this with any unique action string that you prefer.

Once the service is exported and has a specific intent filter, you can start it from another app using a PendingIntent or by sending an Intent with the matching action. Here's an example of how to do it:

Intent serviceIntent = new Intent(context, SyncthingService.class);
serviceIntent.setAction("com.example.SYNCHING_SERVICE_ACTION");
context.startService(serviceIntent);

By specifying the same action name when starting the service, you can initiate the SyncthingService instance from another application.

Remember that exporting services can potentially introduce security risks if not used carefully. Be sure to understand how your app and any third-party components interact with each other's services before making this change.

hossain-khan commented 1 week ago

syncthing-manifest.txt Attached file