Почему 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>
Флаг перестает устанавливать контроллеры Device Policy: Обновление приложения в фоновом режиме с помощью Device Policy Controller
Почему этот флаг установлен и как его остановить?
Ответы
Ответ 1
На днях я побежал в это время. Основываясь на моем тестировании, этот флаг добавляется только при запуске приложения из Android Studio. К сожалению, имя файла APK не указывает на проблему. И, несмотря на документацию, этот APK доступен только для Android Studio — Я специально пытался установить его через adb
, который должен работать, но не делает.
Если вы создаете APK другими способами, флаг не следует добавлять. В частности, я использовал задачу assembleRelease
Gradle. Я бы ожидал, что опция "Build APK (s)" в Android Studio также будет работать.
Учитывая Instant Run и другие потенциальные махинации, которые Android Studio может делать для прямых прогонов по сравнению с другими, я не удивлен, что они добавили этот флаг. Лично я хотел бы получить более четкий вариант отказаться от всех таких махинаций (и, возможно, этого флага), поскольку я один из тех странных людей, которые хотят, чтобы приложение, которое я запускал из среды IDE, было тем же самым приложением, что и мои пользователи.
FWIW, у меня есть больше информации об этом на этом сообщении в блоге.