The Search App by Ask is an application developed by APN, LLC that allows users to search the internet easily and quickly. Its minimalist interface provides a user-friendly experience, allowing users of all levels to search efficiently. подробнее .
UpdateStar Premium Edition 14.0.1933
UpdateStar — 8,2MB — Commercial —
UpdateStar является программа, которая позволяет вам оставаться в курсе всех ваших личных программного обеспечения, вы используете на вашем компьютере. подробнее .
Ask Toolbar 12.47.5.84
Поиск умнее и быстрее с спросите панель инструментов!* Поиск в Интернете, ваш рабочий стол или электронной почты прямо с вашего браузера * Персонализируйте ваш опыт поиска с сохраненных местоположений, местные новости и многое другое … подробнее .
Autodesk App Manager 3.3
Autodesk App Manager is a software application developed by Autodesk Inc. that allows users to easily manage their Autodesk software and plugins. подробнее .
BlueStacks App Player 5.11.42.2003
BlueStack Systems, Inc. — 0,8MB — Freeware —
Как скачать Сбербанк Оноайн если его нет в iMazing
BlueStacks App Player является программное обеспечение, чтобы помочь вам использовать все ваши любимые мобильные приложения на основе Windows на вашем компьютере. подробнее .
EA app 12.0.229.5212
Electronic Arts (EA) has developed a mobile app called EA app. The app serves as a hub for various EA games and services. Users can download and install games, manage their accounts, and receive news and updates about their favorite games. подробнее .
Everything Search Engine 1.4.1.1023
voidtools — 0,9MB — Shareware —
Шон о ‘ Коннор — получите все игры в одном пакете! подробнее .
Google Chrome 114.0.5735.26
Безопасный просмотр Google Chrome предупреждает вас, если вы собираетесь посетить поддельного, вредоносных программ или иначе небезопасных веб-сайт. подробнее .
App Explorer 0.273.4.186
App Explorer is an application developed by SweetLabs, a software development company. It is a free tool that helps users discover and explore new apps for their Windows computer. подробнее .
Shopping App by Ask 12.47.5.83
Ask by APN, LLC has developed a shopping app that is gaining popularity among users. The app allows shoppers to conveniently browse and purchase products from a wide range of retailers. подробнее .
Результаты поиска
search app by ask что это за программа
Описания содержат
search app by ask что это за программа
Microsoft Update Health Tools 4.66
Microsoft Corporation — 13,5MB — Shareware —
Используйте приложение PC Health Check, чтобы узнать, соответствует ли ваш текущий компьютер требованиям для запуска Windows 11. Если это так, вы можете получить бесплатное обновление, когда он выкатывается. подробнее .
UpdateStar Premium Edition 14.0.1933
UpdateStar — 8,2MB — Commercial —
UpdateStar является программа, которая позволяет вам оставаться в курсе всех ваших личных программного обеспечения, вы используете на вашем компьютере. подробнее .
ElasticSearch что это такое — ElasticSearch уроки
Microsoft Visual C++ 2015 Redistributable Package 14.30.30528
Microsoft — 13,9MB — Freeware —
Распространяемый пакет Microsoft Visual C++ 2015 — это программный компонент, созданный корпорацией Майкрософт. Он предоставляет пользователям необходимые компоненты среды выполнения для запуска приложений, созданных с помощью Visual … подробнее .
Mozilla Firefox 113.0.2
Mozilla — 55,8MB — Freeware —
Firefox позволяет контролировать ваш веб-опыт. С оптимизированный пользовательский интерфейс весело возможностей, повышения производительности и новейших открытых веб-технологий, Firefox обеспечивает будущее Интернета, сегодня.Firefox … подробнее .
WinRAR 6.21.0
win.rar GmbH — 3,4MB — Shareware —
OCB 2.16 — это новая версия популярной оболочки для архиватора WinRAR. Программа специально предназначена для быстрого и удобного создания резервных копий документов. подробнее .
Microsoft Silverlight 5.1.50918.0
Microsoft — 12,5MB — Freeware —
Silverlight — по существу, это не более, чем Microsoft видение кроссбраузерный, кроссплатформенный подключаемый модуль источника опыта богатых онлайн пользователей и выбить вспышки от ее текущей доминирующей позиции на рынке. подробнее .
Microsoft Edge WebView2 Runtime 113.0.1774.42
Управление Microsoft Edge WebView2 позволяет вставлять веб-технологии (HTML, CSS и JavaScript) в свои родные приложения. Управление WebView2 использует Microsoft Edge (Chromium) в качестве рендеринга для отображения веб-контента в родных … подробнее .
Java Update 8.0.3610.9
Oracle — 2MB — Freeware —
Среды выполнения Java SE содержит виртуальную машину Javaбиблиотеки классов среды выполнения и запуска приложений Java, которыенеобходимые для запуска программ, написанных на языке программирования Java.Это не среде разработки и не … подробнее .
WhatsApp 2.2319.9
WhatsApp Messenger является кросс платформенных мобильных сообщений приложение, которое позволяет вам обмениваться сообщениями без необходимости платить за SMS. подробнее .
BlueStacks 5.10.150.1016
BlueStack Systems, Inc. — 323,7MB — Shareware —
BlueStacks является облачных приложений, означает, что вы можете легко переместить ваши приложения из магазина Play Google прямо на ваш компьютер и использовать их оттуда. подробнее .
Дополнительные заголовки, содержащие
search app by ask что это за программа
Search App by Ask 12.47.5.89
The Search App by Ask is an application developed by APN, LLC that allows users to search the internet easily and quickly. Its minimalist interface provides a user-friendly experience, allowing users of all levels to search efficiently. подробнее .
Autodesk App Manager 3.3
Autodesk App Manager is a software application developed by Autodesk Inc. that allows users to easily manage their Autodesk software and plugins. подробнее .
BlueStacks App Player 5.11.42.2003
BlueStack Systems, Inc. — 0,8MB — Freeware —
BlueStacks App Player является программное обеспечение, чтобы помочь вам использовать все ваши любимые мобильные приложения на основе Windows на вашем компьютере. подробнее .
Ask Toolbar 12.47.5.84
Поиск умнее и быстрее с спросите панель инструментов!* Поиск в Интернете, ваш рабочий стол или электронной почты прямо с вашего браузера * Персонализируйте ваш опыт поиска с сохраненных местоположений, местные новости и многое другое … подробнее .
EA app 12.0.229.5212
Electronic Arts (EA) has developed a mobile app called EA app. The app serves as a hub for various EA games and services. Users can download and install games, manage their accounts, and receive news and updates about their favorite games. подробнее .
Источник: www.updatestar.com
Реализация full-text поиска данных в android-приложениях через AppSearch и RxJava
Совсем недавно Google анонсировал библиотеку для локального поиска документов AppSearch. Библиотека пока находится на стадии alpha-версии, но тем не менее уже можно применить её и рассмотреть ряд возможностей. В этой статье мы разработаем небольшое приложение для локального поиска разного рода документов и отобразим их пользователю для демонстрации работы AppSearch.
Введение
AppSearch – это высокопроизводительная библиотека для поиска на устройстве для управления локально хранящимися структурированными данными. Она содержит API-интерфейсы для индексирования данных и извлечения данных с помощью полнотекстового поиска. Приложения могут использовать AppSearch для поиска разнородных локальных данных. Таким образом, даже если пользователь отключен от сети Интернет – то вы сможете осуществить поиск не только по данным на текущем экране, а среди всех когда-то сохранённых данных.
AppSearch предлагает следующие возможности:
- Быстрая, mobile-first реализация для хранения данных
- Высокоэффективное индексирование и запросы к большим наборам данных
- Поддержка мультиязычности, например поиска среди контента на английском языке и испанском
- Рейтинг релевантности и оценка использования
Из-за меньшего количества операций ввода-вывода AppSearch предлагает меньшую задержку для индексации и поиска в больших наборах данных по сравнению с SQLite. AppSearch упрощает запросы перекрестного типа (типа join), поддерживая отдельные запросы, тогда как SQLite объединяет результаты из нескольких таблиц.
Чтобы проиллюстрировать возможности AppSearch, давайте рассмотрим пример приложения для поиска медиаконтента. Пользователь пытается найти контент и ему не важно, фильм это, сериал, а может быть это актёр или песня. Более того, контент может быть на разных языках. Соответственно, если в приложении мы уже сохранили такие данные – то, с помощью AppSearch мы не ограничиваем пользователя каким-то одним типом контента, а позволяем отобразить всё, что удовлетворяет запросу.
Для иллюстрации работы AppSearch можно взглянуть на следующую диаграмму, взятую из официальной документации:
База данных AppSearch и сессия
База данных AppSearch – это набор документов, соответствующих схеме базы данных. Android-приложения создают базу данных, предоставляя контекст своего приложения и имя базы данных. Базы данных могут быть открыты только приложением, которое их создало. При открытии базы данных возвращается сессия для взаимодействия с базой данных. Сессия является точкой входа для вызова API-интерфейсов AppSearch и остается открытой до тех пор, пока не будет закрыта клиентским приложением.
Схема и типы схемы
Схема представляет собой организационную структуру данных в базе данных AppSearch. Схема состоит из типов схем, которые представляют уникальные типы данных. Типы схемы состоят из свойств, которые содержат имя, тип данных и количество элементов. После добавления типа схемы в схему базы данных документы этого типа схемы могут быть созданы и добавлены в базу данных.
Документы
В AppSearch единица данных представлена в виде документа. Каждый документ в базе данных AppSearch уникально идентифицируется своим пространством имен и идентификатором. Пространства имен используются для разделения данных из разных источников, когда требуется запросить только один источник, например учетные записи пользователей.
Документы содержат отметку времени создания, время жизни (TTL) и оценку, которая может использоваться для ранжирования во время поиска. Документу также назначается тип схемы, который описывает дополнительные свойства данных, которые должен иметь документ. Класс документа – это абстракция документа. Он содержит аннотированные поля, которые представляют содержимое документа. По умолчанию имя класса документа задает имя типа схемы.
Поиск
Документы индексируются, и их можно искать, предоставив запрос. Документ сопоставляется и включается в результаты поиска, если он содержит термины в запросе или соответствует другой спецификации поиска. Результаты упорядочены на основе их оценки и стратегии ранжирования. Результаты поиска представлены страницами, которые можно извлекать последовательно. AppSearch предлагает настройки для поиска, такие как фильтры, конфигурацию размера страницы и баллы для ранжирования.
Итак, мы разобрались с основными компонентами и теперь можно начать интегрировать AppSearch в наше приложение.
Добавление в проект
Чтобы начать работать с AppSearch сперва нужно добавить библиотеку. Открой build.gradle и добавьте kapt плагин:
plugins
После этого добавьте библиотеку:
dependencies < def appsearch_version = «1.0.0-alpha02» implementation «androidx.appsearch:appsearch:$appsearch_version» // Use kapt instead of annotationProcessor if writing Kotlin classes kapt «androidx.appsearch:appsearch-compiler:$appsearch_version» implementation «androidx.appsearch:appsearch-local-storage:$appsearch_version» >
Кроме этого, нужно еще добавить библиотеку Guava – так как нам понадобится класс ListenableFuture необходимый для работы AppSearch
implementation ‘com.google.guava:guava:27.0.1-android’
Нажмите Sync Now. Отлично! Теперь мы готовы использовать AppSearch
Создание документов MovieDocument и PersonDocument
Давайте рассмотрим аннотации, которые тут используются:
При этом у Document.StringProperty есть два параметра:
- AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES – поле, помеченное таким параметром должно возвращаться для запросов, которые либо полностью совпадают, либо запросить совпадения токенов, указанных в этом свойстве. Пример. Свойство с “fool” должно соответствовать запросу для “foo”.
- AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS Содержимое этого свойства должно возвращаться только для запросов, соответствующих точным токенам фигурирующим в этом поле. Пример. Свойство с “fool” НЕ должно соответствовать запросу для “foo”.
Аналогичным образом опишем и документ PersonDocument.
Отлично, мы описали документы для поиска, теперь нам необходимо создать схему базы данных для дальнейшей записи документов и поиска.
Открытие базы данных и создание схемы
Перед работой с документами необходимо создать базу данных. Следующий код создает новую базу данных с именем movies_demo_db и получает ListenableFuture для AppSearchSession, который представляет соединение с базой данных и предоставляет API-интерфейсы для операций с базой данных.
val sessionFuture: ListenableFuture = LocalStorage.createSearchSession( LocalStorage.SearchContext.Builder(activity?.applicationContext. «movies_demo_db») .build() )
Вы должны установить схему, прежде чем вы сможете вставлять документы и получать документы из базы данных. Схема базы данных состоит из различных типов структурированных данных, называемых «типами схемы». Следующий код устанавливает схему, предоставляя класс документа как тип схемы. Этот метод находится в файле AppSearchRepository.kt – для удобства все методы работы с App Search вынесены в отдельный репозиторий.
fun setSchema(documentClasses: Collection>) < val setSchemaRequest = SetSchemaRequest.Builder().addDocumentClasses(documentClasses) .build() // Created ListenableFuture val setSchemaFuture = Futures.transformAsync( sessionFuture, < session ->session?.setSchema(setSchemaRequest) >, threadPoolExecutor ) Futures.addCallback( setSchemaFuture, object : FutureCallback < override fun onSuccess(result: SetSchemaResponse?) < Log.d(TAG, «SetSchemaResponse success. $result») >override fun onFailure(t: Throwable) < Log.d(TAG, «Failed to put documents. $t») >>, threadPoolExecutor ) >
Ура, мы создали сессию для работы с БД и указали нужные схемы документов. Теперь, давайте попытаемся сохранить данные, а затем произвести поиск. Но перед этим немного поговорим про ListenableFuture.
Обзор Future, ListenableFuture, Executor
Интерфейс java.util.concurrent.Future описывает API для работы с задачами, результат которых мы планируем получить в будущем: методы получения результата, методы проверки статуса. Future представляет собой результат асинхронных вычислений: вычисление, которое, возможно, еще не закончилось или уже дало результат. Future может быть указателем на выполняемые вычисления, обещанием службы предоставить нам результат.
ListenableFuture позволяет вам регистрировать обратные вызовы, которые будут выполняться после завершения вычисления или, если вычисление уже завершено, немедленно. Это простое дополнение позволяет эффективно поддерживать многие операции, которые базовый интерфейс Future не поддерживает. Базовая операция, добавляемая ListenableFuture, – это addListener (Runnable, Executor), которая указывает, что когда вычисление, представленное этим Future, выполнено, указанный Runnable будет запущен на указанном Executor. Более подробно про ListenableFuture можно почитать тут.
С помощью метода transformAsync (в который мы и передали ExecutorService ) мы создаем ListenableFuture для последующего выполнения. И в Futures.addCallback добавляем нашу задачу и регистрируем callback. Аналогично работают и другие методы для сохранения и поиска данных. В следующем разделе мы реализуем метод сохранения данных.
Сохранение данных в БД
После добавления типа схемы можно добавлять документы этого типа в базу данных. Следующий код создает документ переданного типа с помощью билдера:
val putRequest = PutDocumentsRequest.Builder().addDocuments(documents).build()
Создаём ListenableFuture для выполнения задачи сохранения:
val putFuture = Futures.transformAsync( sessionFuture, < session ->session?.put(putRequest) >, threadPoolExecutor )
Регистрируем callback для получения результата. Кроме того, для удобства метод сохранения и поиска обёрнуты в Observable, чтобы можно было вызывать эти методы в Rx-цепочке. В итоге весь метод сохранения будет выглядеть так:
fun saveData(documents: List): Observable < val putRequest = PutDocumentsRequest.Builder().addDocuments(documents).build() val putFuture = Futures.transformAsync( sessionFuture, < session ->session?.put(putRequest) >, threadPoolExecutor ) return Observable.create < emitter ->Futures.addCallback( putFuture, object : FutureCallback?> < override fun onSuccess(result: AppSearchBatchResult?) < // Gets map of successful results from Id to Void val successfulResults = result?.successes Log.d(TAG, «successfulResults» + result?.successes) // Gets map of failed results from Id to AppSearchResult val failedResults = result?.failures Log.d(TAG, «failedResults» + result?.failures) emitter.onNext(true) >override fun onFailure(t: Throwable) < Log.e(TAG, «Failed to put documents. $t») emitter.onError(t) >>, threadPoolExecutor ) > >
Теперь нам нужно создать метод для поиска и извлечения данных.
Реализация поиска и отображения данных
val searchSpec = SearchSpec.Builder() .addFilterNamespaces(nameSpace) .build()
В данном случае мы просто указываем фильтр документа по namespace. В этом случае мы будем искать только те документы, которые имеют указанные пространства имен. Если не задано, поиск будет выполняться по всем пространствам имен. Кроме этого, есть еще несколько параметров:
- setResultCountPerPage() – Устанавливает количество результатов на страницу в возвращаемом объекте. По умолчанию количество результатов на странице – 10.
- setRankingStrategy() – позволяет задать стратегию ранжирования результатов.
- setOrder() – позволяет задать сортировку (ORDER_DESCENDING, ORDER_ASCENDING). Например ORDER_DESCENDING означает, что результаты с более высокими баллами идут первыми.
- setResultGrouping() позволяет группировать документы, например по namespace
Стратегий ранжирования может быть несколько, они достаточно неплохо описаны в исходниках:
- public static final int RANKING_STRATEGY_NONE = 0; – ранжирования нет
- public static final int RANKING_STRATEGY_DOCUMENT_SCORE = 1 – ранжироваание по заданному Score
- public static final int RANKING_STRATEGY_CREATION_TIMESTAMP = 2 – ранжироваание по timestamp
- public static final int RANKING_STRATEGY_RELEVANCE_SCORE = 3 – ранжирование по relevance score
- public static final int RANKING_STRATEGY_USAGE_COUNT = 4 – ранжирование по частоте использования
- public static final int RANKING_STRATEGY_USAGE_LAST_USED_TIMESTAMP = 5 – ранжирование по дате последнего использования
- public static final int RANKING_STRATEGY_SYSTEM_USAGE_COUNT = 6 – судя по всему не поддерживается (Reporting system usage is not supported in the local backend, so this method does nothing
- public static final int RANKING_STRATEGY_SYSTEM_USAGE_LAST_USED_TIMESTAMP = 7 – судя по всему не поддерживается
После того, как мы определили поиск, необходимо создать ListenableFuture и зарегистрировать callback:
fun search(term: String, nameSpace: String? = «»): Observable < Log.d(TAG, «search: $term») val searchSpec = SearchSpec.Builder() .addFilterNamespaces(nameSpace) .build(); val searchFuture: ListenableFuture= Futures.transform( sessionFuture, < session ->session?.search(term, searchSpec) >, threadPoolExecutor ) return Observable.create < emitter ->Futures.addCallback( searchFuture, object : FutureCallback < override fun onSuccess(searchResults: SearchResults?) < searchResults?.let < emitter.onNext(searchResults) >> override fun onFailure(t: Throwable) < emitter.onError(t) >>, threadPoolExecutor ) > >
Используя Rx через оператор create и emitter передаём полученные данные searchResults: SearchResults. SearchResults – специальный интерфейс через который мы можем получить список результатов через метод getNextPage()
Для удобства, создадим метод, получающий SearchResults и отдающий список GenericDocument – как раз те самые документы, которые удовлетворяют нашему поиску:
fun iterateSearchResults( searchResults: SearchResults? ): Observable> < val getDocumentsFuture: ListenableFuture> = Futures.transform( searchResults?.nextPage, < page: List? -> // Gets GenericDocument from SearchResult. val genericDocument: List? = page?.map < it.genericDocument >?.toList() genericDocument >, threadPoolExecutor ) return Observable.create < emitter ->Futures.addCallback( getDocumentsFuture, object : FutureCallback> < override fun onSuccess(result: List?) < result?.let < Log.d(TAG, «onSuccess $result») emitter.onNext(result) >> override fun onFailure(t: Throwable) < Log.d(TAG, «onFailure $t») emitter.onError(t) >>, threadPoolExecutor ) > >
Итак, мы описали методы для сохранения, поиска и получения документов. Осталось объединить их воедино на странице пользовательского интерфейса.
Для реализации поиска мы будем использовать RxJava, и подпишемся на поле ввода текста как показано ниже:
compositeDisposable.add( binding.searchToolbar.onTextChangedObservable.debounce(1, TimeUnit.SECONDS) .filter < it.length >4 > .flatMap < repository.search(it) >.flatMap < repository.iterateSearchResults(it) >.observeOn(AndroidSchedulers.mainThread()) .subscribe( < result ->val allMovies: MutableList = mutableListOf() val allPerson: MutableList = mutableListOf() result?.forEach < genericDocument ->val schemaType = genericDocument.schemaType try < if (schemaType == «MovieDocument») < // Converts GenericDocument object to MovieDocument object. allMovies.add(genericDocument.toDocumentClass(MovieDocument::class.java)) >else if (schemaType == «PersonDocument») < allPerson.add(genericDocument.toDocumentClass(PersonDocument::class.java)) >> catch (e: AppSearchException) < Log.d(TAG, «Failed to convert GenericDocument $e») >> adapter.clear() val movies = allMovies.map < MoviePreviewItem(MovieMapper.fromMovieDocument(it)) <>> .toList() if (movies.isNotEmpty()) < val movieItem = MainCardContainer(«Movies», movies) binding.eventsRecyclerView.adapter = adapter.apply < add(movieItem) >> val personItems = allPerson.map < PersonItem(PersonMapper.fromPersonDocument(it)) <>> .toList() if (personItems.isNotEmpty()) < val personResultItem = MainCardContainer(«Actors», personItems) binding.eventsRecyclerView.adapter = adapter.apply < add(personResultItem) >> >, < Log.d(TAG, «Error: $it») >) )
Проверяя схему документа можно из GenericDocument получить именно тот документ, который мы сохранили и отобразить в любом виде. Для отображения данных будем использовать библиотеку Groupie. Если вы никогда не работали с данной библиотекой – от советую прочитать вот эту статью
Сначала фильтруем данные по схеме, а затем создаём ячейки для отображения данных. Таким образом, после поиска по строке “Морти” получаем данные из двух документов: MovieDocument и PersonDocument.
Результат поиска по строке «Морти»
Надеюсь, в этой статье нам удалось показать пример работы с библиотекой AppSearch для full-text поиска разнородных документов. Как уже было сказано, похожего функционала можно добиться используя SQLite, однако тогда придётся осуществлять join по нескольким таблицам. Кроме этого AppSearch заточен именно под full-text поиск большого количества разнородных документов, идеально если у вас какое-нибудь медиа-приложение с большим количеством контента (Фильмы/Книги/Игры) и вам нужно осуществить поиск не только по описанию, а например названиям, краткому описанию книги, цитатам etc. Библиотека пока на стадии alpha и скорее всего в скором будущем появится возможность использовать Rx или Kotlin coroutines, но пока приходится работать с LinstenableFuture. В качестве упрощения — можно сделать обёртки через RxJava и работать уже с ней. Не забудьте поставить звёздочку исходному коду на GitHub и подписаться на наш телеграм-канал
- Разработка мобильных приложений
- Разработка под Android
- SQLite
Источник: habr.com
App Search
Поиск приложений — это приложение для поиска приложений, которое быстро ищет ваши приложения.
Основные функции AppSearch:
Search Самый быстрый поиск
☆ показывает недавнюю историю
Info Информация о приложении
App удалить приложение
☆ Нажмите на значок поиска на клавиатуре, откроется первое приложение в результатах поиска
Ves экономит время
☆ Маленькое приложение
Adds не добавляет
☆ Поддержка планшетов
Инструкция:
Search Введите ключевое слово для поиска в поле поиска
☆ Нажмите на название приложения, чтобы открыть приложение
☆ или нажмите значок поиска на клавиатуре, чтобы открыть первое приложение в результатах поиска
Популярные запросы
LD Player — #1 Android Emulator
Лучший Эмулятор Андроида для ПК
Приложения · Hot
TikTok TikTok Pte. Ltd. · Социальные
Google Play Маркет Google LLC · Инструменты
自由浏览 Greatfire.org · Связь
VK VK.com · Социальные
Spaces — Зона обмена Artem Kalash · Социальные
Популярные
Турецкая клавиатура Keyboard Mania · Работа
Cortana for Android Microsoft Corporation · Работа
Máy chơi game PS VITA Sony Electronics Vietnam · Работа
Teacher’s Pet Mathanbrian · Работа
CensusPro censuspro · Работа
Advanced Task Manager azendpowa · Работа
Doc Scanner -Phone PDF Creator Easy Mob Apps · Работа
Malayalam Calendar 2017 Icelab Solutions Pvt Ltd · Работа
App Permission Manager Shexa Technolabs · Работа
Notepad App Yoginder Andley · Работа
APKCombo Installer
Порядок установки XAPK, APKS, OBB?
Источник: apkcombo.com