2017-10-31 5 views
3

3.0.0-rcX(Canaryチャンネルから)経由でAndroidスタジオ3.0.0(安定したチャンネルから)に到着しました。Androidスタジオ3.0.0がAPKでFLAG_TEST_ONLYに設定されているのはなぜですか?

新しいアプリを起動してビルドすると、(アプリ内の)次のコードで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> 

フラグは、それをインストールすることができることから、デバイスポリシーコントローラを停止します。Upgrading app in background using Device Policy Controller

なぜ、このフラグが設定され、そしてどのように私はからそれを止めます設定されていますか?

+2

AFAIK、このフラグはAndroidスタジオからアプリが実行されている場合にのみ設定されます。他の手段(例えば、 'assembleRelease' Gradleタスク)によって構築されたAPKには、このフラグはありません。したがって、Androidスタジオからアプリを実行し、結果のAPKを取得する以外の方法でアップデート用のAPKを作成します。 – CommonsWare

+0

@CommonsWare 'rm app/build/outputs/apk/debug/app-debug.apk'と' ./gradlew assembleDebug'がこのトリックでした。それを答えると、私はそれを受け入れます。 – fadedbee

+1

adb install -t file.apkを使用してアプリケーションをインストールする –

答えて

7

先日、私はこれに頭を悩ませました。テストに基づいて、Androidスタジオからアプリを実行した場合にのみ、このフラグが追加されます。残念ながら、APKファイル名はこの問題を示唆していません。ドキュメントにもかかわらず、このAPKはのみがAndroidスタジオから利用可能です—私は具体的には動作するはずのadb経由でインストールしようとしていましたが、そうではありませんでした。

APKを他の方法で構築する場合は、フラグを追加しないでください。具体的には、assembleRelease Gradleタスクを使用しました。私はAndroid Studioの「APK(s)」メニューオプションも同様に動作すると期待しています。

Androidスタジオが直接ビルドと他のビルドとで実行している可能性があるインスタント・ランとその他の潜在的な嫌悪感が与えられたとき、私はこのフラグを追加したことに驚いていません。個人的には、IDEから実行しているアプリを自分のユーザーが実行するのと同じアプリにしたいという奇妙な人の1人だから、このような卑劣なこと(そしておそらくこの旗)を除外するという明確な選択肢が個人的には好きです。

FWIW、私はthis blog postでこれに関する多くの背景を持っています。

関連する問題