Перейти к содержанию
Fire Monkey от А до Я
  • 0

Исключить устройства с Intel Atom как не поддерживаемые


Евгений Корепов

Вопрос

Как исключить устройства с Intel Atom из списка поддерживаемых устройств? Так что бы в Google Play было сообщение  "Application does not support this device". 

Приложения не работают на Intel Atom, но пользователи успешно их устанавливают, естественно запуск не возможен. 80% плохих оценок выставляют как раз пользователи с Intel Atom. Из за этого приложение с потенциальной оценкой 4.5 висит в маркете с 3.8. Обидно однако.

Может в манифесте можно что то прописать? Управлять исключениями в консоли разработчика не вариант - вручную исключать устройства для каждого приложения  - исключалка сломается. Механизма импорта списка исключенных устройств гугль к сожалению еще не придумал.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы
4 минуты назад, dante333 сказал:

А можно по подробней,что за модифицированый файл?

положить в папку с проектом и добавить в uses

FMX.Platform.Android.zip

Ссылка на комментарий
  • 0
2 часа назад, ZuBy сказал:

положить в папку с проектом и добавить в uses

FMX.Platform.Android.zip

Спасибо.А какие изменения?Что фиксит?

UPD.Разобрался.Спасибо еще раз.

Изменено пользователем dante333
Ссылка на комментарий
  • 0
  • Модераторы
2 часа назад, dante333 сказал:

А можно по подробней,что за модифицированый файл?

фиксит неправильное определение  размеров формы, на интеле часть формы залезает под статус бар

Ссылка на комментарий
  • 0

Проверил работу Firemonkey на планшете Dexp Ursus gx180 (на нем установлен процессор Intel Atom Z3735F, видео тоже интел). Верх формы залезает под системный statusbar (решением является StatusBar Color от ZuBy http://fire-monkey.ru/topic/2577-statusbar-color/#comment-14604), либо установить свойство формы Fullscreen=true, но тогда нажимать на кнопки приходится чуть выше чем они видны. Причем похоже MapView выставляет свое положение правильно, в отличии от остальных элементов.

Кстати, никакие lib*.so отключать не пришлось. Программа запускается и работает, что не может не радовать. Тосты показывает.

К чему это я... может не стоит исключать устройства с Intel Atom из списка поддерживаемых? )

Изменено пользователем Rusland
Ссылка на комментарий
  • 0

А вот такая реализация не помогает обойти проблему:

{$IF     defined(CPUARM)}
  ...
{$ELSEIF defined(CPUX86)}
  ...
{$ENDIF}
end;
{$ELSEIF Defined(CPUX86)}
begin
  ...
end;
{$ELSEIF Defined(CPUX64)}
begin
  ...
end;
{$ELSE OTHERCPU}
  {$MESSAGE Fatal 'Method not implemented for CPU'}
{$ENDIF OTHERCPU}

 

Ссылка на комментарий
  • 0
  • Модераторы
4 часа назад, Pax Beach сказал:

А вот такая реализация не помогает обойти проблему:


{$IF     defined(CPUARM)}
  ...
{$ELSEIF defined(CPUX86)}
  ...
{$ENDIF}
end;
{$ELSEIF Defined(CPUX86)}
begin
  ...
end;
{$ELSEIF Defined(CPUX64)}
begin
  ...
end;
{$ELSE OTHERCPU}
  {$MESSAGE Fatal 'Method not implemented for CPU'}
{$ENDIF OTHERCPU}

 

кажется это не прокатит, т.к. запускается в эмуляторе (JVM Dalvik или ART), поэтому архитектура будет ARM

я пытался через java пробиться к процессору, но всегда получал ARM

Изменено пользователем ZuBy
забыл про новый ART
Ссылка на комментарий
  • 0

При публикации проекта в Google Play, получаю сообщение, что проект доступен для платформ на базе ARM. Про Intel речи нет. Видимо на таких устройствах не будет устанавливаться.

Ссылка на комментарий
  • 0
  • Модераторы
7 минут назад, Pax Beach сказал:

При публикации проекта в Google Play, получаю сообщение, что проект доступен для платформ на базе ARM. Про Intel речи нет. Видимо на таких устройствах не будет устанавливаться.

у меня вот так

Цитата

armeabi, armeabi-v7a, mips

 

Ссылка на комментарий
  • 0
15 минут назад, ZuBy сказал:

у меня вот так

 

Google Play по какой то причине не выделяет Intel Atom как X86. Считается что это arm процессор :-( 

Ссылка на комментарий
  • 0
  • Модераторы
1 минуту назад, Евгений Корепов сказал:

Google Play по какой то причине не выделяет Intel Atom как X86. Считается что это arm процессор :-( 

я так понимаю это MIPS архитектура

Ссылка на комментарий
  • 0
3 минуты назад, ZuBy сказал:

я так понимаю это MIPS архитектура

Нет, MIPS это отдельная ветвь https://ru.wikipedia.org/wiki/MIPS_(архитектура) , Intel Atom к ней не имеет отношения, он именно X86, а гугль не фильтрует его как x86 из за возможности эмуляции arm - сволочи.

Ссылка на комментарий
  • 0
Только что, Rusland сказал:

Проверил на intel Atom код


{$IF defined(CPUARM)}
  Label1.text := 'armv7';
{$ELSEIF defined(CPUX86)}
  Label1.text := 'intel';
{$ENDIF}

Выдает armv7

Не смешно даже.

Ссылка на комментарий
  • 0

Вот приложение с маркета (а также всякие CPU-Z, Aida64) как-то определяет ведь что процессор intel. Как они это делают?

Изменено пользователем Rusland
Ссылка на комментарий
  • 0

Тут есть код на java для Lollipop:

import android.os.Build;

Log.i(TAG, "CPU_ABI : " + Build.CPU_ABI);
Log.i(TAG, "CPU_ABI2 : " + Build.CPU_ABI2);
Log.i(TAG, "OS.ARCH : " + System.getProperty("os.arch"));

Log.i(TAG, "SUPPORTED_ABIS : " + Arrays.toString(Build.SUPPORTED_ABIS));
Log.i(TAG, "SUPPORTED_32_BIT_ABIS : " + Arrays.toString(Build.SUPPORTED_32_BIT_ABIS));
Log.i(TAG, "SUPPORTED_64_BIT_ABIS : " + Arrays.toString(Build.SUPPORTED_64_BIT_ABIS));

Есть ли в Delphi обертка android.os.Build?

Ссылка на комментарий
  • 0
  • Модераторы

на андроид студии это делается так

5.0 и выше
for(String s : Build.SUPPORTED_32_BIT_ABIS) {
	Log.i("TAG", "CPU_32: " + s);
}

for(String x : Build.SUPPORTED_64_BIT_ABIS) {
	Log.i("TAG", "CPU_64: " + x);
}

до 5.0
Log.i("TAG", "CPU_ABI: " + Build.CPU_ABI);
Log.i("TAG", "CPU_ABI2: " + Build.CPU_ABI2);
Ссылка на комментарий
  • 0
  • Модераторы
1 минуту назад, Pax Beach сказал:

FMX Express же выкладывали все обертки.

все есть из коробки

JStringToString(TJBuild.JavaClass.CPU_ABI)

 

Ссылка на комментарий
  • 0

Взял код вот отсюда:

procedure TForm10.Button2Click(Sender: TObject);
begin
  Memo1.Lines.Add(Format('%s:%s', ['BOARD',
    JStringToString(TJBuild.JavaClass.BOARD)]));
  Memo1.Lines.Add(Format('%s:%s', ['BOOTLOADER',
    JStringToString(TJBuild.JavaClass.BOOTLOADER)]));
  Memo1.Lines.Add(Format('%s:%s', ['BRAND',
    JStringToString(TJBuild.JavaClass.BRAND)]));
  Memo1.Lines.Add(Format('%s:%s', ['CPU_ABI',
    JStringToString(TJBuild.JavaClass.CPU_ABI)]));
  Memo1.Lines.Add(Format('%s:%s', ['CPU_ABI2',
    JStringToString(TJBuild.JavaClass.CPU_ABI2)]));
  Memo1.Lines.Add(Format('%s:%s', ['DEVICE',
    JStringToString(TJBuild.JavaClass.DEVICE)]));
  Memo1.Lines.Add(Format('%s:%s', ['DISPLAYドID',
    JStringToString(TJBuild.JavaClass.DISPLAY)]));
  Memo1.Lines.Add(Format('%s:%s', ['FINGERPRINT',
    JStringToString(TJBuild.JavaClass.FINGERPRINT)]));
  Memo1.Lines.Add(Format('%s:%s', ['HARDWARE',
    JStringToString(TJBuild.JavaClass.HARDWARE)]));
  Memo1.Lines.Add(Format('%s:%s', ['HOST',
    JStringToString(TJBuild.JavaClass.HOST)]));
  Memo1.Lines.Add(Format('%s:%s', ['ID',
    JStringToString(TJBuild.JavaClass.ID)]));
  Memo1.Lines.Add(Format('%s:%s', ['MANUFACTURER',
    JStringToString(TJBuild.JavaClass.MANUFACTURER)]));
  Memo1.Lines.Add(Format('%s:%s', ['MODEL',
    JStringToString(TJBuild.JavaClass.MODEL)]));
  Memo1.Lines.Add(Format('%s:%s', ['PRODUCT',
    JStringToString(TJBuild.JavaClass.PRODUCT)]));
  Memo1.Lines.Add(Format('%s:%s', ['RADIO',
    JStringToString(TJBuild.JavaClass.RADIO)]));
  Memo1.Lines.Add(Format('%s:%s', ['TAGS',
    JStringToString(TJBuild.JavaClass.TAGS)]));
  Memo1.Lines.Add(Format('%s:%d', ['TIME', TJBuild.JavaClass.TIME]));
//  Memo1.Lines.Add(Format('%s:%s', ['TYPE',
//    JStringToString(TJBuild.JavaClass.&TYPE)]));
  Memo1.Lines.Add(Format('%s:%s', ['UNKNOWN',
    JStringToString(TJBuild.JavaClass.UNKNOWN)]));
  Memo1.Lines.Add(Format('%s:%s', ['USER',
    JStringToString(TJBuild.JavaClass.USER)]));
  Memo1.Lines.Add(Format('%s:%s', ['CODENAME',
    JStringToString(TJBuild_VERSION.JavaClass.CODENAME)]));
  Memo1.Lines.Add(Format('%s:%s', ['INCREMENTAL',
    JStringToString(TJBuild_VERSION.JavaClass.INCREMENTAL)]));
  Memo1.Lines.Add(Format('%s:%s', ['RELEASE',
    JStringToString(TJBuild_VERSION.JavaClass.RELEASE)]));
  Memo1.Lines.Add(Format('%s:%d', ['SDK_INT',
    TJBuild_VERSION.JavaClass.SDK_INT]));
end;

Единственное упоминание Intel в Fingerprint... ну хоть что-то

Screenshot_2016-09-26-10-28-35.png

Ссылка на комментарий
  • 0
  • Модераторы
20 минут назад, ZuBy сказал:

на андроид студии это делается так


5.0 и выше
for(String s : Build.SUPPORTED_32_BIT_ABIS) {
	Log.i("TAG", "CPU_32: " + s);
}

for(String x : Build.SUPPORTED_64_BIT_ABIS) {
	Log.i("TAG", "CPU_64: " + x);
}

до 5.0
Log.i("TAG", "CPU_ABI: " + Build.CPU_ABI);
Log.i("TAG", "CPU_ABI2: " + Build.CPU_ABI2);

этот код на Delphi будет такой

{$IFDEF ANDROID}
var
  I: integer;
  arrObj32: TJavaObjectArray<JString>;
  arrObj64: TJavaObjectArray<JString>;
  arrObjAbis: TJavaObjectArray<JString>;
  s32, s64, sAbis: string;
begin
    s32 := '';
    arrObj32 := TJBuild.JavaClass.SUPPORTED_32_BIT_ABIS;
    for I := 0 to arrObj32.Length - 1 do
    	s32 := s32 + JStringToString(arrObj32.Items[I]);

    s64 := '';
    arrObj64 := TJBuild.JavaClass.SUPPORTED_64_BIT_ABIS;
    for I := 0 to arrObj64.Length - 1 do
    	s64 := s64 + JStringToString(arrObj64.Items[I]);

    sAbis := '';
    arrObjAbis := TJBuild.JavaClass.SUPPORTED_ABIS;
    for I := 0 to arrObjAbis.Length - 1 do
    	sAbis := sAbis + JStringToString(arrObjAbis.Items[I]);
end;
{$ENDIF}

 

Ссылка на комментарий
  • 0
  • Модераторы
20 минут назад, Rusland сказал:

Единственное упоминание Intel в Fingerprint... ну хоть что-то

Цитата

FINGERPRINT

Added in API level 1

String FINGERPRINT

A string that uniquely identifies this build. Do not attempt to parse this value.

 

Ссылка на комментарий
  • 0

Я не понял, нужно ли снимать эту галочку с libnative-activity.so чтобы поддерживались Intel устройства или нет?

Что это за файл вообще, для чего он используется? И будет ли без него корректно работать программа.

Для чего то ведь его включают в проект...

Delphi Berlin.

Изменено пользователем ENRGY
Ссылка на комментарий
  • 1

там стоит заглушка, которая выводит надпись "ваша платформа не поддерживается, до свидания"

но факт в том, что на большом кол-ве интел стоит библиотека houdini которая поддерживает запуск программ, написанных для ARM

в результате и ваша программа тоже имеет шанс запуститься. поэтому, убрав эту птицу, вы можете "без программирования", как это принято в RAD Studio ))) получить хороший результат )))

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...