Определить, было ли приложение загружено с Android Market - PullRequest
52 голосов
/ 12 июня 2009

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

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

Ответы [ 5 ]

37 голосов
/ 13 июня 2009

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

    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. Удачи

знак

10 голосов
/ 22 декабря 2011

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

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

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

3 голосов
/ 13 июня 2009

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

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

1 голос
/ 12 июня 2009

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

0 голосов
/ 13 июня 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...