Почему Android Studio 3.0.0 устанавливает FLAG_TEST_ONLY на APK?

Я прибыл в Android Studio 3.0.0 (из стабильного канала) через 3.0.0-rcX (из Канарского канала).

Когда я запускаю новое приложение и собираю его, следующий код (внутри приложения) показывает, что установлен флаг FLAG_TEST_ONLY.

Log.e(TAG, "ApplicationInfo: " + (getApplicationInfo().flags & ApplicationInfo.FLAG_TEST_ONLY));

10-31 09:54:05.226 16129-16129/com.example.dummy E/MainActivity: ApplicationInfo: 256

Манифест приложения:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.dummy">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Этот флаг не позволяет контроллерам политики устройств установить его: обновление приложения в фоновом режиме с помощью контроллера политики устройства

Почему этот флаг установлен, и как я могу остановить его установку?

1 ответ

Решение

Я с головой столкнулся с этим на днях. По результатам моего тестирования этот флаг добавляется только в том случае, если вы запускаете приложение из Android Studio. К сожалению, имя файла APK не намекает на проблему. И, несмотря на документацию, этот APK можно использовать только из Android Studio - я специально пытался установить его через adb, который должен работать, но не работает.

Если вы строите APK другими способами, флаг добавлять не нужно. В частности, я использовал assembleRelease Задача Gradle. Я ожидаю, что опция меню "Build APK(s)" в Android Studio также будет работать.

Учитывая Instant Run и другие потенциальные махинации, которые Android Studio может делать для прямых сборок по сравнению с другими, я не удивлен, что они добавили этот флаг. Лично я хотел бы иметь более четкую возможность отказаться от всех таких махинаций (и, возможно, от этого флага), поскольку я один из тех чудаков, которые хотят, чтобы приложение, которое я запускаю из IDE, было тем же приложением, которое запускают мои пользователи.

FWIW, у меня есть больше информации об этом в этом сообщении в блоге.

Другие вопросы по тегам