2016-04-24 3 views
2

Я создаю крошечное фиктивное приложение, используя командную строку (без градиента) только с одним пустым действием, без разрешений, без библиотек поддержки (или с любыми другими библиотеками, в Google Play и т. Д.), И все же Android всегда запрашивает эти два разрешения во время установки:Почему во время установки всегда запрашиваются два разрешения?

enter image description here

Я понимаю, как и почему разрешения сольются в том, когда другие библиотеки включены во время сборки, но мое приложение не имеет ничего включено. Я извлек и расшифровал скомпилированный файл AndroidManifest.xml из полученного APK, и в нем нет тега <uses-permission>.

Согласно this question, добавляется READ_PHONE_STATE, если значение minSdkVersion введено, но в манифесте я объявлен (что я также вижу в скомпилированном манифесте). Вот источник манифеста:

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

    <uses-sdk minSdkVersion="20" targetSdkVersion="22" /> 

    <application 
     android:label="TestApp No Perms" 
     android:icon="@drawable/ic_launcher"> 

     <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> 

Сингл активность (MainActivity) просто вызывает setContentView() на пустой макет.

Может ли кто-нибудь пролить свет на вопрос, почему эти разрешения всегда запрашиваются или как их не запрашивать?

+1

Вы также проверили файл Gradle? – fillobotto

+0

@fillobotto no gradle (как упоминалось в первой строке) - приложение скомпилировано с помощью инструментов командной строки Android SDK. – adelphus

+0

«приложение скомпилировано с помощью инструментов командной строки Android SDK» - это не исключает использования Gradle. На самом деле, если вы * не * используете Gradle, это может быть частью вашей проблемы. Предыдущие подходы командной строки (например, Ant) больше не поддерживаются. – CommonsWare

ответ

0

Ответ пришел к недостающему android: префиксу на атрибутах minSdkVersion и targetSdkVersion.

Префикс android: не выдает никаких предупреждений или ошибок из компилятора ресурсов, но из-за недостающего префикса значение игнорируется, когда манифест APK анализируется во время установки.

В результате Android считает, что нет minSdkVersion и, как сообщается в Why does my app has the READ_PHONE_STATE permission although it's not declared in manifest?, автоматически запрашивает разрешения.

Добавление в префикс android: устраняет проблему и позволяет устанавливать приложение без приглашений на разрешение.

Смежные вопросы