Не устанавливается приложение (файл apk) на Android TV v11. На android TV Xiaomi

scp

Member
The application (apk file) cannot be installed on Android TV v11. Android TV Xiaomi
What could be wrong and how can it be fixed?

Что может быть и как возможно исправить?

B4X:
#Region  Project Attributes
    #ApplicationLabel: Меню
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: true
    #IncludeTitle: false
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Private xui As XUI
    Private LastUrl As String
    Private ButFocusX As Int
    Private ButFocusY As Int
    Private ButBack As Int
    'Private PressBack As Int
    Private UrlList(10) As String
    Private menucount As Int

    '------------------------------------------------------------------------------------------


End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    UrlList(0)="https://prtv.su/46543"
    UrlList(1)="https://prtv.su/46543"
    UrlList(2)=""
    menucount=0
    
    Private MenuView As WebView
    Private LeftMenu As Button
    Private RightMenu As Button
    Private RefreshButton As Button
    Private ImageView As ImageView
    
    Dim sf As StringFunctions
    sf.Initialize
    
    Private ButSet As Button
    Private ButExit As Button
    Private Label1 As Label

    Private BU As Button
    Private BL As Button
    Private BD As Button
    Private BR As Button
    Private BE As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)

    If FirstTime=True Then DisableStrictMode
    ButFocusX=0
    ButFocusY=0
    ButBack=0
    LastUrl=""


    
    
    ReadFromFile
      
    Activity.LoadLayout("Menu")
    ImageView.Bitmap = LoadBitmap(File.DirAssets, "font.jpg")
    
    ' -------------------КНОПКИ УПРАВЛЕНИЯ-------------
    BL.Visible=False
    BR.Visible=False
    BD.Visible=False
    BU.Visible=False
    BE.Visible=False
    Label1.Visible=False
    '--------------------------------------------------
    
    LeftMenu.Color = Colors.Cyan
    RightMenu.Color = Colors.Cyan
    RefreshButton.Color = Colors.Green
    ButSet.Color=Colors.Cyan
    ButExit.Color=Colors.Cyan
    
    ImageView.Height=LeftMenu.Height*6
    ImageView.Top=MenuView.Height/2-LeftMenu.Height*3
    LeftMenu.Top=MenuView.Height/2-LeftMenu.Height/2
    RightMenu.Top=MenuView.Height/2-RightMenu.Height/2
    RefreshButton.Top=MenuView.Height/2-RefreshButton.Height/2
    ButSet.Top=MenuView.Height/2-LeftMenu.Height*2
    ButExit.Top=MenuView.Height/2+LeftMenu.Height
    
    LeftMenu.Visible = False
    RightMenu.Visible = False
    RefreshButton.Visible =False
    ImageView.Visible=False
    ButSet.Visible=False
    ButExit.Visible=False
    
    If sf.Len(LastUrl)>0 Then  'если программа запущена не первый раз
        
        MenuView.LoadUrl(LastUrl)

    Else
        
        LeftMenu.Visible = True
        RightMenu.Visible = True
        RefreshButton.Visible =True
        ImageView.Visible=True
        ButSet.Visible=True
        ButExit.Visible=True
        ButBack=1

    End If
    
End Sub


Sub Activity_Resume
    MenuView.LoadUrl(LastUrl)
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    MenuView.LoadUrl(LastUrl)
End Sub

Sub Activity_KeyPress (KeyCode As Int) As Boolean
    
    Label1.Text="    "&KeyCode
    If KeyCode = KeyCodes.KEYCODE_BACK Then ' НАЖАТА КНОПКА НАЗАД
        ' ПРИ НАЖАТИ 3 РАЗА КНОПКИ НАЗАД - ВЫХОД ИЗ ПРИЛОЖЕНИЯ
        menucount = menucount + 1
        If menucount = 3 Then
            Activity.Finish
        End If
        '-----------------------------------------------------
        Label1.Text=KeyCode
        LeftMenu.Visible = True
        RightMenu.Visible = True
        RefreshButton.Visible = True
        ImageView.Visible=True
        ButSet.Visible=True
        ButExit.Visible=True
        
        LeftMenu.Color = Colors.Cyan
        RightMenu.Color = Colors.Cyan
        RefreshButton.Color = Colors.Green
        ButSet.Color=Colors.Cyan
        ButExit.Color=Colors.Cyan
        
        ButFocusX=0
        ButFocusY=0
        ButBack=1
        
        Return True ' Возвращаем True, чтобы предотвратить дальнейшую обработку события
    End If
    
    If KeyCode = KeyCodes.KEYCODE_DPAD_LEFT Then ' НАЖАТА КНОПКА НА ПУЛЬТЕ - ВЛЕВО
        menucount=0
        If ButFocusX=1 And ButFocusY=0 Then
            ButFocusX=0
            ButFocusY=0
            LeftMenu.Color = Colors.Cyan
            RightMenu.Color = Colors.Cyan
            RefreshButton.Color = Colors.Green
            ButSet.Color=Colors.Cyan
            ButExit.Color=Colors.Cyan
            
            Return True
        End If
    
        If ButFocusX=-1 And ButFocusY=0 Then
            ButFocusX=1
            ButFocusY=0
            LeftMenu.Color = Colors.Cyan
            RightMenu.Color = Colors.Green
            RefreshButton.Color = Colors.Cyan
            ButSet.Color=Colors.Cyan
            ButExit.Color=Colors.Cyan
            
            Return True
        End If
    
        If ButFocusX=0 And ButFocusY=0 Then
            ButFocusX=-1
            ButFocusY=0
            LeftMenu.Color = Colors.Green
            RightMenu.Color = Colors.Cyan
            RefreshButton.Color = Colors.Cyan
            ButSet.Color=Colors.Cyan
            ButExit.Color=Colors.Cyan
            
            Return True
        End If
    
        Return True
    End If
    
    If KeyCode = KeyCodes.KEYCODE_DPAD_RIGHT Then ' НАЖАТА КНОПКА НА ПУЛЬТЕ - ВПРАВО
        menucount=0
        If ButFocusX=1 And ButFocusY=0 Then
            ButFocusX=-1
            ButFocusY=0
            LeftMenu.Color = Colors.Green
            RightMenu.Color = Colors.Cyan
            RefreshButton.Color = Colors.Cyan
            ButSet.Color=Colors.Cyan
            ButExit.Color=Colors.Cyan
            
            Return True
        End If
        
        If ButFocusX=0 And ButFocusY=0 Then
            ButFocusX=1
            ButFocusY=0
            LeftMenu.Color = Colors.Cyan
            RightMenu.Color = Colors.Green
            RefreshButton.Color = Colors.Cyan
            ButSet.Color=Colors.Cyan
            ButExit.Color=Colors.Cyan
            
            Return True
        End If
    
        If ButFocusX=-1 And ButFocusY=0 Then
            ButFocusX=0
            ButFocusY=0
            LeftMenu.Color = Colors.Cyan
            RightMenu.Color = Colors.Cyan
            RefreshButton.Color = Colors.Green
            ButSet.Color=Colors.Cyan
            ButExit.Color=Colors.Cyan
            
            Return True
        End If
        
        Return True
    End If
    
    If KeyCode=KeyCodes.KEYCODE_DPAD_UP Then ' НАЖАТА КНОПКА НА ПУЛЬТЕ - ВВЕРХ
        If ButFocusY=0 Then
            ButFocusY=1
            ButFocusX=0
            LeftMenu.Color = Colors.Cyan
            RightMenu.Color = Colors.Cyan
            RefreshButton.Color = Colors.Cyan
            ButSet.Color=Colors.Green
            ButExit.Color=Colors.Cyan
        
        End If
        If ButFocusY=-1 Then
            ButFocusY=0
            LeftMenu.Color = Colors.Cyan
            RightMenu.Color = Colors.Cyan
            RefreshButton.Color = Colors.Green
            ButSet.Color=Colors.Cyan
            ButExit.Color=Colors.Cyan
        
        End If
    End If
    
    If KeyCode=KeyCodes.KEYCODE_DPAD_DOWN Then ' НАЖАТА КНОПКА НА ПУЛЬТЕ - ВНИЗ
        If ButFocusY=0 Then
            ButFocusY=-1
            ButFocusX=0
            LeftMenu.Color = Colors.Cyan
            RightMenu.Color = Colors.Cyan
            RefreshButton.Color = Colors.Cyan
            ButSet.Color=Colors.Cyan
            ButExit.Color=Colors.Green
        
        End If
        If ButFocusY=1 Then
            ButFocusY=0
            ButFocusX=0
            LeftMenu.Color = Colors.Cyan
            RightMenu.Color = Colors.Cyan
            RefreshButton.Color = Colors.Green
            ButSet.Color=Colors.Cyan
            ButExit.Color=Colors.Cyan
        
        End If
    End If
    
    If KeyCode = KeyCodes.KEYCODE_ENTER Or KeyCode = KeyCodes.KEYCODE_DPAD_CENTER Then ' НАЖАТА КНОПКА НА ПУЛЬТЕ - ENTER or Center pad
        menucount=0
        If ButFocusX=-1 And ButBack=1 And ButFocusY=0 Then
            LastUrl = UrlList(0)
        
            MenuView.LoadUrl(LastUrl)
            LeftMenu.Visible = False
            RightMenu.Visible = False
            RefreshButton.Visible =False
            ButSet.Visible=False
            ButExit.Visible=False
        
            WriteToFile(LastUrl)
            ImageView.Visible=False
            ButBack=0
        End If
        
        If ButFocusX=0 And ButBack=1 And sf.len(LastUrl)>0 And ButFocusY=0 Then
            MenuView.LoadUrl(LastUrl)
            LeftMenu.Visible = False
            RightMenu.Visible = False
            RefreshButton.Visible =False
            ImageView.Visible=False
            ButSet.Visible=False
            ButExit.Visible=False
            
            ButBack=0
        End If
        If ButFocusX=1 And ButBack=1 And ButFocusY=0 Then
            LastUrl = UrlList(1)
        
            MenuView.LoadUrl(LastUrl)
            LeftMenu.Visible = False
            RightMenu.Visible = False
            RefreshButton.Visible =False
            ButSet.Visible=False
            ButExit.Visible=False
            
            WriteToFile(LastUrl)
            ImageView.Visible=False
            ButBack=0
        End If
        
        If ButBack=1 And ButFocusY=-1 Then 'Выход
            ButFocusX=0
            ButFocusY=0
            ExitApplication
        End If
        
        Return True
    End If
    

    
    Return False
End Sub




Sub WriteToFile(urlFile As String)
    Dim text As String = urlFile
    File.WriteString(File.DirInternal, "LastUrl.txt", text)
End Sub

Sub ReadFromFile
    If File.Exists(File.DirInternal, "LastUrl.txt") Then
        
        LastUrl=File.ReadString(File.DirInternal, "LastUrl.txt")
    
    Else
        Log("Файл не найден.")
    End If
End Sub

Private Sub LeftMenu_Click
    LastUrl = UrlList(0)
    menucount=0
    MenuView.LoadUrl(LastUrl)
    LeftMenu.Visible = False
    RightMenu.Visible = False
    RefreshButton.Visible =False
    ButSet.Visible=False
    ButExit.Visible=False
    
    WriteToFile(LastUrl)
    ImageView.Visible=False
End Sub

Private Sub RightMenu_Click
    LastUrl = UrlList(1)
    menucount=0
    MenuView.LoadUrl(LastUrl)
    LeftMenu.Visible = False
    RightMenu.Visible = False
    RefreshButton.Visible =False
    ButSet.Visible=False
    ButExit.Visible=False
    
    WriteToFile(LastUrl)
    ImageView.Visible=False
End Sub


Private Sub RefreshButton_Click
    menucount=0
    If ButFocusX=0 And ButBack=1 And sf.len(LastUrl)>0 Then
        MenuView.LoadUrl(LastUrl)
        LeftMenu.Visible = False
        RightMenu.Visible = False
        RefreshButton.Visible =False
        ImageView.Visible=False
        ButSet.Visible=False
        ButExit.Visible=False
        
        ButBack=0
    End If

End Sub

Sub DisableStrictMode 'Android 4+ не позволяет приложениям выполнять сетевые вызовы в основном потоке. Для этого ограничения есть веская причина: такие вызовы приводят к зависанию пользовательского интерфейса, и через 5 секунд Android покажет диалоговое окно «Приложение не отвечает».
    Dim jo As JavaObject
    jo.InitializeStatic("android.os.Build.VERSION")
    If jo.GetField("SDK_INT") > 9 Then
        Dim policy As JavaObject
        policy = policy.InitializeNewInstance("android.os.StrictMode.ThreadPolicy.Builder", Null)
        policy = policy.RunMethodJO("permitAll", Null).RunMethodJO("build", Null)
        Dim sm As JavaObject
        sm.InitializeStatic("android.os.StrictMode").RunMethod("setThreadPolicy", Array(policy))
    End If
End Sub



Private Sub ButSet_Click
    
End Sub

Private Sub ButExit_Click
    ExitApplication
End Sub
 

Attachments

  • AndroidManifest.xml
    1.4 KB · Views: 62
  • MenuPage.rar
    489.8 KB · Views: 55

Oregon

Member
Текст ошибки выложите и фото. Таких шансов на ответ больше.
 

scp

Member
Текст ошибки выложите и фото. Таких шансов на ответ больше.
photo_2025-11-17_15-47-33 (2).jpg
photo_2025-11-17_15-47-33.jpg

Вот из стороннего установщика и из родного. Android TV v11
А на остальных устройствах ставилось без проблем
 

Oregon

Member
Попробуйте понизить версию SDK в Project-Manifest Editor
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="34"/>.
 

Oregon

Member
Ок, с лету не получилось). Предлагаю сделать скриншоты с приложения Device Info HW. Общее, ЦП, система. Может там что-нибудь будет видно. Насколько я понял, тут русскоязычных пользователей очень мало. Пока будете искать решение проблемы может напишите приложение на чем- то другом?
 

Oregon

Member
Ок, с лету не получилось). Предлагаю сделать скриншоты с приложения Device Info HW. Общее, ЦП, система. Может там что-нибудь будет видно. Насколько я понял, тут русскоязычных пользователей очень мало. Пока будете искать решение проблемы, можете написать в приложении что-то другое?
Хотел сказать - на чем-то другом приложение напишите?
 

scp

Member
Привет @scp

Я установил ваше приложение на свой Android-TV, прилагаю скриншот:
(Я не компилировал код, а просто установил apk-файл)

Как установить приложение?

View attachment 168759
Так же, у меня везде устанавливается. возникает проблема только на этих двух ТВ с андройд, как раз куда оно и предназначалось... Походу сама система глючная, обновить не могу, нету обновлений на нее. Хотя с плей-маркета там ставятся другие приложения, опять же видит в поиске не всё приложения.
 
Last edited:

f0raster0

Well-Known Member
Licensed User
Longtime User
Попробуйте сделать так:
1. Переименуйте ваше приложение: menu.APK (убедитесь, что расширение именно .APK).
2. Скопируйте приложение menu.APK на USB-FlashDrive.
3. Вставьте USB-FlashDrive в Android TV (в USB-разъём).
4. С помощью приложения «Файловый менеджер» (или любого похожего приложения) найдите menu.APK на USB-FlashDrive.
5. Нажмите на menu.APK, чтобы начать установку

Покажите мне скриншот того, что вы видите после шага 5..
 
Last edited:

Oregon

Member
Вот что выдал Gemini по запросу "Приложение созданное в basic4android не устанавливается на android tv от xiaomi":

Проблемы с установкой приложений, созданных в B4A (Basic4Android), на Android TV (особенно Xiaomi) чаще всего связаны с манифестом и требованиями к оборудованию. Android TV очень строг к тому, какие функции приложение запрашивает (например, сенсорный экран, GPS, телефония). Если телевизор видит, что приложению нужен тачскрин (а у телевизора его нет), он просто откажет в установке.

Вот пошаговое руководство, как исправить эту проблему.


1. Настройка Манифеста (Самое важное)​

Вам нужно открыть Project -> Manifest Editor (Проект -> Редактор манифеста) и добавить туда специфические строки для Android TV.

Обязательные изменения:

  1. Отключите требование сенсорного экрана. По умолчанию Android считает, что сенсорный экран нужен.
  2. Объявите поддержку Leanback (интерфейс ТВ).
  3. Добавьте баннер (иконку для ТВ лаунчера).
Вставьте этот код в Редактор Манифеста:

Фрагмент кода

' 1. Указываем, что сенсорный экран НЕ обязателн
AddManifestText(
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<uses-feature android:name="android.software.leanback" android:required="false" />
)

' 2. Если вы используете GPS или Камеру в коде, но они не критичны, отключите их обязательность
AddManifestText(
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.telephony" android:required="false" />
)

' 3. Добавляем категорию LEANBACK_LAUNCHER для Activity (обычно Main)
' Это позволит приложению появиться в меню Android TV
AddActivityText(Main,
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
)

Важное примечание: В стандартном коде AddActivityText(Main, ...) убедитесь, что вы не дублируете фильтры. Если у вас уже есть android.intent.category.LAUNCHER, добавление LEANBACK_LAUNCHER создаст две иконки (одну для мобильных, одну для ТВ), или используйте только одну, если это чисто ТВ приложение.


2. Проверка архитектуры (32-bit vs 64-bit)​

Современные телевизоры и приставки Xiaomi могут требовать 64-битные библиотеки. Если вы используете старые библиотеки в B4A, приложение может не установиться.

  • Проверьте, используете ли вы внешние библиотеки (например, Vitamio, специфические драйверы). Если они только 32-битные (armeabi-v7a), приложение не встанет на устройство, требующее arm64-v8a.
  • В B4A попробуйте скомпилировать приложение без лишних библиотек, чтобы проверить, в этом ли дело.

3. Подпись приложения (Signing)​

Xiaomi TV часто блокируют установку, если приложение подписано Debug Key (ключом отладки).

  1. В B4A переключите режим компиляции с Debug на Release (или Release (Obfuscated)).
  2. Убедитесь, что вы используете свой Private Sign Key (Tools -> Private Sign Key).
  3. Если вы устанавливаете через ADB, убедитесь, что на телевизоре включена "Отладка по USB" и "Установка через USB" (Install via USB).

4. Версия SDK (targetSdkVersion)​

Проверьте android:targetSdkVersion в манифесте.

  • Google требует, чтобы новые приложения для TV имели targetSdkVersion не ниже 33 (Android 13) или хотя бы 31 (Android 12), но для прямой установки (sideload) это не так критично.
  • Однако, если minSdkVersion выше, чем версия Android на телевизоре, вы получите ошибку "Parse Error" (Ошибка синтаксического анализа).
    • Установите minSdkVersion="21" (Android 5.0) для максимальной совместимости.
В манифесте:

Фрагмент кода

<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33"/>


5. Особенности Xiaomi (Настройки безопасности)​

На самих устройствах Xiaomi (Mi Box, Mi TV Stick) есть скрытые настройки безопасности.

  1. Зайдите в Настройки -> Настройки устройства -> Безопасность и ограничения.
  2. Разрешите "Неизвестные источники" для того файлового менеджера, через который вы устанавливаете APK (например, X-Plore или Send Files to TV).
  3. На некоторых Xiaomi нужно включить Developer Options (нажать 7 раз на номер сборки) и отключить пункт "Verify apps over USB" (Проверять приложения при установке по USB), даже если ставите не через USB.

Как диагностировать точную причину?​

Самый надежный способ узнать причину — попытаться установить приложение через ADB с компьютера. Это покажет код ошибки.

  1. Включите отладку по USB на телевизоре.
  2. Подключитесь с ПК: adb connect <IP_адрес_ТВ>
  3. Попробуйте установить: adb install -r ваше_приложение.apk
Типичные ошибки:

  • INSTALL_FAILED_NO_MATCHING_ABIS: Проблема с 32/64 бит (см. пункт 2).
  • INSTALL_FAILED_MISSING_SHARED_LIBRARY: Приложение требует библиотеку (например, Google Maps), которой нет на ТВ.
  • INSTALL_FAILED_OLDER_SDK: Версия Android на ТВ слишком старая для вашего minSdkVersion.
 

Oregon

Member
После анализа манифеста вот что ответил Gemini:
Изучив ваш код, я вижу главную причину, почему Xiaomi TV (и любой другой Android TV) отказывается устанавливать приложение.

Причина: В вашем манифесте отсутствует строчка, отключающая требование сенсорного экрана. Телевизоры не имеют тачскрина. Android по умолчанию считает, что каждому приложению нужен тачскрин. При попытке установки система видит несоответствие оборудования ("приложению нужен тач, у меня его нет") и блокирует установку.

Вот исправленный код, который нужно вставить в ваш Manifest Editor (замените всё, что у вас там сейчас, на этот код):

Фрагмент кода

'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136

AddManifestText(
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="34"/>
<supports-screens android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<uses-feature android:name="android.software.leanback" android:required="false" />
)

SetApplicationAttribute(android:icon, "@drawable/icon")
' Для TV лучше использовать баннер, но иконка тоже сойдет для начала
SetApplicationAttribute(android:banner, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")

' Стандартная тема Holo очень старая, для ТВ лучше использовать Theme.DeviceDefault,
' но пока оставим вашу, чтобы не сломать дизайн.
CreateResourceFromFile(Macro, Themes.LightTheme)
SetApplicationAttribute(android:theme, "@style/CustomTheme")

CreateResource(values, theme.xml,
<resources>
<style name="CustomTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
</resources>)

' === ВАЖНО: ЧТОБЫ ПРИЛОЖЕНИЕ ПОЯВИЛОСЬ В МЕНЮ TV ===
' Добавьте этот блок, чтобы иконка появилась на главном экране телевизора
AddActivityText(Main,
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
)

Что я изменил и почему:​

  1. <uses-feature android:name="android.hardware.touchscreen" android:required="false" />: Это главное исправление. Оно говорит телевизору: "Этому приложению не обязательно нужен палец и сенсорный экран, им можно управлять с пульта". Без этого Xiaomi TV даже не начнет установку.
  2. minSdkVersion="21": Я поднял минимум с 14 до 21 (Android 5.0). Android 4.0 (SDK 14) безнадежно устарел, и современные библиотеки B4A и Google Play Services могут конфликтовать с таким низким значением на новых ТВ.
  3. AddActivityText(Main, ... LEANBACK_LAUNCHER ...):
    • Обычные телефоны ищут категорию LAUNCHER.
    • Android TV ищет категорию LEANBACK_LAUNCHER.
    • Без этого кода приложение установится (после исправления п.1), но не будет видно в списке приложений на главном экране Xiaomi TV. Его придется искать глубоко в настройках.
Попробуйте скомпилировать и установить этот вариант. Если ошибка останется, напишите, пожалуйста, какую именно ошибку выдает телевизор или ADB.
Исходя из вашего кода, основная причина, по которой приложение не устанавливается на Xiaomi TV — это отсутствие явного указания, что сенсорный экран (тачскрин) не требуется.

По умолчанию Android считает, что любому приложению нужен тачскрин. Телевизор «видит» это требование, проверяет себя (у него нет тачскрина) и блокирует установку с ошибкой «Device not compatible» (Устройство не поддерживается).

Вот исправленный код для вашего Манифеста. Замените ваш текущий блок на этот:

1. Исправленный блок AddManifestText​

Я добавил строки <uses-feature ... android:required="false" />. Скопируйте и замените ваш первый блок этим кодом:

Фрагмент кода

AddManifestText(
<uses-sdk android:minSdkVersion="17" android:targetSdkVersion="34"/>
<supports-screens android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<uses-feature android:name="android.software.leanback" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
)

(Я также поднял minSdkVersion до 17, так как Android 4.0 (SDK 14) уже слишком стар для Android TV, но если вам критично 14 — можете вернуть).

2. Чтобы иконка появилась в меню ТВ (Launcher)​

Даже если приложение установится с кодом выше, вы можете не найти его иконку в главном меню телевизора (оно будет спрятано в Настройках -> Приложения).

Чтобы иконка появилась на главном экране Xiaomi TV, добавьте в редактор манифеста (ниже предыдущего кода) этот блок:

Фрагмент кода

'Делаем иконку видимой в лаунчере Android TV
AddActivityText(Main,
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
)

3. Проблема с темой (Theme.Holo)​

В вашем коде используется тема:parent="@android:style/Theme.Holo.Light"

Предупреждение: Тема Holo очень старая. На современных Android TV (Android 9/10/11) использование старых тем может приводить к вылету приложения при запуске (Crash on start). Если после установки приложение вылетает, попробуйте изменить тему в вашем коде создания ресурсов на более новую, например, Theme.Material:

Фрагмент кода

'Замените Theme.Holo.Light на Theme.Material.Light.NoActionBar или аналогичную
<style name="CustomTheme" parent="@android:style/Theme.Material.Light.NoActionBar">

Итог: что нужно сделать прямо сейчас​

  1. Вставьте строки <uses-feature ... android:required="false" /> внутрь AddManifestText.
  2. Скомпилируйте APK.
  3. Попробуйте установить. Это решит 99% проблем с установкой на Xiaomi TV.
 

pixet

Active Member
Licensed User
Longtime User
Try enabling developer mode and enabling installation from unknown sources on the Android device that you can't install.

Попробуйте включить режим разработчика и разрешить установку из неизвестных источников на устройстве Android, на котором у вас не получается установить программу.
 
Top