为什么 Android Studio 3.0.0 在 APK 上设置 FLAG_TEST_ONLY?
Why is Android Studio 3.0.0 setting FLAG_TEST_ONLY on APKs?
我已经通过 3.0.0-rcX(来自 Canary 频道)到达 Android Studio 3.0.0(来自稳定频道)。
当我启动一个全新的应用程序并构建它时,以下代码(应用程序内部)显示 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>
该标志阻止设备策略控制器安装它:
为什么要设置这个标志,如何阻止它被设置?
前几天我运行一头扎进了这个。根据我的测试,仅当您 运行 来自 Android Studio 的应用程序时,才会添加此标志。不幸的是,APK 文件名并未提示问题所在。而且,尽管有文档,但此 APK 仅 可从 Android Studio 中使用 — 我特地尝试通过 adb
安装它,这应该可以工作,但是没有。
如果您以其他方式构建 APK,则不应添加该标志。具体来说,我使用了 assembleRelease
Gradle 任务。我希望 Android Studio 中的 "Build APK(s)" 菜单选项也能正常工作。
考虑到 Instant 运行 和 Android Studio 可能针对直接 运行 构建与其他构建所做的其他潜在恶作剧,我对他们添加此标志并不感到惊讶。就个人而言,我希望有一个更清晰的选项来选择退出所有此类恶作剧(也许还有这个标志),因为我是那些想要 IDE 运行 应用程序的怪人之一我的用户 运行.
使用的是同一个应用
FWIW,我在 this blog post 上有更多这方面的背景知识。
我已经通过 3.0.0-rcX(来自 Canary 频道)到达 Android Studio 3.0.0(来自稳定频道)。
当我启动一个全新的应用程序并构建它时,以下代码(应用程序内部)显示 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>
该标志阻止设备策略控制器安装它:
为什么要设置这个标志,如何阻止它被设置?
前几天我运行一头扎进了这个。根据我的测试,仅当您 运行 来自 Android Studio 的应用程序时,才会添加此标志。不幸的是,APK 文件名并未提示问题所在。而且,尽管有文档,但此 APK 仅 可从 Android Studio 中使用 — 我特地尝试通过 adb
安装它,这应该可以工作,但是没有。
如果您以其他方式构建 APK,则不应添加该标志。具体来说,我使用了 assembleRelease
Gradle 任务。我希望 Android Studio 中的 "Build APK(s)" 菜单选项也能正常工作。
考虑到 Instant 运行 和 Android Studio 可能针对直接 运行 构建与其他构建所做的其他潜在恶作剧,我对他们添加此标志并不感到惊讶。就个人而言,我希望有一个更清晰的选项来选择退出所有此类恶作剧(也许还有这个标志),因为我是那些想要 IDE 运行 应用程序的怪人之一我的用户 运行.
使用的是同一个应用FWIW,我在 this blog post 上有更多这方面的背景知识。