Проблемы с APK расширения Android

Недавно мы начали использовать новый механизм Google Expansion APK. В целом работает хорошо, но нам кажется несколько хлипким. Некоторые вопросы:

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

  2. Иногда, когда нам нужно загрузить файл расширения самостоятельно, Google Play возвращает -1 для размера файла и ноль для URL-адреса, указывая на то, что файл расширения не существует. Если я снова запущу приложение, во второй раз оно, как правило, вернет правильный размер и URL-адрес. Кто-нибудь еще видит это безобразие?

Вот основы кода:

Вот как мы настроили вызов для проверки лицензии через обратный вызов

    policy = new APKExpansionPolicy( context, new AESObfuscator( SALT, context.getPackageName(), deviceId ) );
    mChecker = new LicenseChecker( context, policy, BASE64_PUBLIC_KEY );
    mLicenseCheckerCallback = new MyLicenseCheckerCallback();
    mChecker.checkAccess( mLicenseCheckerCallback );

Затем в обратном вызове у нас есть это для метода allow() (когда лицензия действительна).

    public void allow( int reason )
    {
        String expansionFileName = policy.getExpansionFileName( APKExpansionPolicy.MAIN_FILE_URL_INDEX );
        String expansionURL = policy.getExpansionURL( APKExpansionPolicy.MAIN_FILE_URL_INDEX );
        long expansionFileSize = policy.getExpansionFileSize( APKExpansionPolicy.MAIN_FILE_URL_INDEX );
    }

Мы только что выпустили приложение с этим новым кодом, но значительное количество пользователей получают обратно -1 в качестве расширенияFileSize и null в качестве URL-адреса. Это приводит к тому, что пользователь не может установить файл расширения. Как правило, если они снова запустят приложение, оно будет работать во второй (или третий) раз.

У кого какие мысли, что может происходить?


person btschumy    schedule 05.04.2012    source источник


Ответы (3)


Вы получаете -1, потому что APKExpansionPolicy отвечает локальным кэшированным результатом, если вы снова пытаетесь связаться с сервером лицензирования, но URL-адрес, размер файла и имя файла не кэшируются и теряются после первого реального ответа. APKExpansionPolicy не кэширует эти результаты, вот комментарий из исходного кода APKExpansionPolicy, который объясняет это:

URL-адреса расширения не привязаны к настройкам, а вместо этого предназначены для сохранения, когда ответ о лицензии обрабатывается внешним интерфейсом.

Поэтому вам нужно сохранить эти значения в настройках сразу после получения первого успешного ответа (в методе обратного вызова allow);

person Daniel Novak    schedule 25.06.2012

запись в блоге для разработчиков Android №1:

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

person kabuko    schedule 05.04.2012
comment
Это не то, что мы видим. Мы получили сообщения о том, что он не работает на Android 3.2 и 4.X. Он работает на некоторых устройствах 2.2. Кажется, не следует никакой рифме или причине. Я хотел бы загрузить файл, если он не загружается автоматически, но он говорит мне, что файл не существует. - person btschumy; 05.04.2012
comment
Если вы можете проверить версию приложения Android Market/Google Play, я подозреваю, что это, вероятно, более актуально, чем версия ОС. - person kabuko; 05.04.2012

Чтобы добавить к ответ Даниэля Новака, если вы сбросите политику перед вызовом checkAccess(), это заставит ее создать новую запрос лицензии и, следовательно, получение URL-адреса:

policy.resetPolicy();

Вы, вероятно, захотите сделать это только в том случае, если уверены, что вам нужен URL-адрес (т. е. если вы уже проверили, что файл расширения отсутствует).

person Saxon Druce    schedule 26.06.2014