Ответ 1
Ну, наконец, Google Play позволяет таргетинг на несколько APK!
"Мы добавили новые функции для приложений, которые используют поддержку нескольких APK. Теперь вы можете настроить таргетинг каждого APK на определенную собственную платформу".
Итак, я подумал, что теперь могу загружать свое приложение, используя разные скомпилированные библиотеки NDK для целенаправленных архитектур процессора, но кажется, что это невозможно.
Кто-нибудь знает, как загрузить в Android Market различные APK, каждый из которых содержит библиотеки, скомпилированные специально для разных архитектур процессора?
Я не пробовал это и выглядел как талия пространства, но можем ли мы включить несколько скомпилированных библиотек в один APK?
Update:
По-видимому, когда пользователь устанавливает apk, неподдерживаемые библиотеки не будут установлены на устройстве. Это хорошо, но пользователю по-прежнему приходится загружать весь apk, теряя пропускную способность.
Ну, наконец, Google Play позволяет таргетинг на несколько APK!
"Мы добавили новые функции для приложений, которые используют поддержку нескольких APK. Теперь вы можете настроить таргетинг каждого APK на определенную собственную платформу".
Если у вас нет куча кода для вашего приложения, я бы предложил просто поместить собственный код для трех архитектур, поддерживаемых андроидами, и момента, armv5, armv7 и x86. Он умножит размер части кода вашего apk, но 3 * (небольшое число) все еще небольшое число. Вы можете сделать это, изменив файл jni/Application.mk или создав его, если у вас его еще нет, и добавьте строку:
APP_ABI := armeabi armeabi-v7a x86
Это будет скомпилировано для всех трех.
Обратите внимание, что есть ошибка с текущим ndk (ndk r6), который пытается связать код x86 с кодом руки. Это исправлено, если вы получаете проект AOSP, source.android.com, или можете просто подождать, пока google-релизы r6b, которые, скорее всего, будут исправлены. В противном случае, если вы не хотите этого делать, вы можете просто отказаться от части x86 этой строки и освободить приложение без кода x86 в нем и нажать обновление, когда выйдет новый ndk. Я не знаю многих популярных устройств, которые еще используют инструкции x86.
Обратитесь Несколько поддержки APK в документации по Android. Это детализирует некоторые особенности выпуска нескольких APK одного и того же продукта/приложения.
Что касается специфики NDK, и, как уже упоминалось, вы можете использовать несколько платформ /ABI в значении APP_ABI вашего Android.mk.
В новой консоли разработчика Play Store, если вы хотите добавить несколько APK, вам нужно будет использовать одно и то же имя пакета и тот же ключ ключей, но другой код версии. Вы публикуете приложение, а затем сначала загружаете Apk, например, mobile_release и rollout для производства, после того как вы загрузите еще один apk, вы должны выбрать опцию RETAIN в предыдущем APK также с текущим APK.
android {
// To create different apk per abi
splits {
abi {
enable true
reset()
include 'armeabi', 'armeabi-v7a', 'x86'
universalApk true
}
}
}
import com.android.build.OutputFile
// Map for the version code
ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'x86': 3]
android.applicationVariants.all { variant ->
// assign different version code for each output
variant.outputs.each { output ->
int abiVersionCode = project.ext.versionCodes.get(output.getFilter(OutputFile.ABI)) ?: 0
output.versionCodeOverride = (abiVersionCode * 1000) + android.defaultConfig.versionCode
}
}
Вы можете объявить supports-gl-texture
в своем AndroidManifest.xml
для каждого отдельно скомпилированного (и повторно упакованного) приложения. Это обеспечит фильтрацию рынка, поэтому один пользователь увидит только одну версию вашего приложения.