Определить, было ли приложение загружено с Android Market

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

Возможно ли, чтобы приложение сообщало, откуда оно появилось (рыночное или не рыночное?), Я мог бы предположить, что можно обнаружить наличие подписанного файла JAR.

5 ответов

Решение

Да, вы можете использовать подпись для этого. Если вы используете ключ отладки для подписи приложения во время разработки и ключ выпуска при загрузке приложения на рынок, вы можете проверить подпись, с которой было подписано приложение, и на основе этого тестового или производственного сервера. Вот небольшой фрагмент кода, чтобы прочитать подпись вашего приложения:

    try {
        PackageManager manager = context.getPackageManager(); 
        PackageInfo appInfo = manager.getPackageInfo(
            YOUR_PACKAGE_NAME, PackageManager.GET_SIGNATURES);

        // Now test if the first signature equals your debug key.
        boolean shouldUseTestServer = 
            appInfo.signatures[0].toCharsString().equals(YOUR_DEBUG_KEY);

    } catch (NameNotFoundException e) {
        // Expected exception that occurs if the package is not present.
    }

YOUR_PACKAGE_NAME должно быть что-то вроде 'com.wsl.CardioTrainer'. Это должно быть имя пакета, которое вы использовали в вашем AndroidManifest.xml. Удачи

отметка

Начиная с API 5, вы можете использовать PackageManager.getInstallerPackageName (String). Из документации:

Получить имя пакета приложения, которое установило пакет. Это определяет, с какого рынка пришла посылка.

Чтобы получить пакет Android Market, этот пост может помочь.

Из того, что я могу сказать, нет ничего, что Market Market делает, чтобы "пометить" приложение, чтобы сказать, что оно было загружено с маркета.

Я видел, как эта проблема по-другому подходила другой библиотеке Android. AdMob Android SDK можно бесплатно загрузить и использовать, как описано в их вики. Эта библиотека служит для показа рекламы, поэтому они также хотят определить, тестируется ли приложение, которое в данный момент выполняется, разработчиком, или оно используется "в дикой природе". Их подход состоял в том, чтобы потребовать, чтобы разработчик установил атрибут "testing" в XML или вызвал функцию своих библиотек "setTesting(boolean)", чтобы позволить библиотеке знать, какую рекламу показывать. Это, очевидно, скорее ручной подход, который основывается на том, что разработчик изменяет одну строку кода или XML перед публикацией.

Вы можете настроить свою конфигурацию по умолчанию на производственную среду и использовать пользовательские Instrumentation это устанавливает конфигурацию в среду тестирования. Интрументация должна быть удалена перед публикацией на андроид маркет.

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

Еще одна возможность - найти специальный файл или файл конфигурации на SD-карте и отключить его.

Другие вопросы по тегам