Как сделать так, чтобы приложение Android автоматически настраивало значения w / debug и release? - PullRequest
4 голосов
/ 27 ноября 2010

Я работаю над приложением для Android, в частности, тем, которое использует Android SDK Facebook. В режиме разработки я работаю с тестовым приложением Facebook, которое работает под одним идентификатором. Однако в режиме выпуска приложение будет работать со вторым приложением Facebook с другим идентификатором.

Мне интересно, как большинство разработчиков Android (или Java может быть достаточно подходящей областью знаний) делают так, чтобы их приложения автоматически создавались с использованием значений отладки и выпуска. Идеальное решение не предполагает ручного переключения (например, переключение public static final DEBUG = false; на true) перед сборкой.

Ответы [ 6 ]

9 голосов
/ 01 марта 2011

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

Как намекнул Себастьян, скрипт Ant может обработать это изменение для вас и сгенерировать статические конечные константы, которыеты ищешь.Вы можете настроить IntelliJ или Eclipse, чтобы сделать его практически бесшовным.

Я попытался подробно описать различные шаги, которые я предпринял здесь , дайте мне знать, если это поможет.Я знаю, что мне никогда не придется вносить какие-либо изменения вручную перед выпуском, и это приятное облегчение!

6 голосов
/ 17 апреля 2012

В eclipse ADT 17.0 и выше есть новая функция для этого.Проверьте BuildConfig.DEBUG, который автоматически создается с вашим кодом.

Для получения дополнительной информации см. http://developer.android.com/sdk/eclipse-adt.html

5 голосов
/ 28 ноября 2010

Я не могу рекомендовать метод IMEI ... главная проблема в том, что не все устройства Android будут иметь IMEI. Лучшим способом является проверка подписи, используемой для подписи .apk.

// See if we're a debug or a release build
try {
    PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
    if (packageInfo.signatures.length>0) {
        String signature = new String(packageInfo.signatures[0].toByteArray());
        isReleaseBuild = !signature.contains("Android Debug");
    }
} catch (NameNotFoundException e1) {
    e1.printStackTrace();
}
1 голос
/ 09 марта 2012

Я использую немного более приземленный метод (если вы все еще заинтересованы в решениях).

При запуске приложения мое приложение проверяет наличие текстового файла, хранящегося в / sdcard /. Каждое приложение, которое у меня есть, ищет определенный файл, такой как «applicationdebug.txt». Если файл существует, то приложение переходит в режим отладки и начинает использовать подробные инструкции журнала, используя мой ключ Facebook для отладки и т. Д.

Затем я просто удаляю (или переименовываю) файл на устройстве, чтобы посмотреть, как приложение работает в режиме выпуска.

0 голосов
/ 25 ноября 2014

С Eclipse я создаю 3 проекта в рабочей области:

  • ApplicationProject

Это библиотечный проект Содержит весь исходный код В values ​​/ refs.xml добавляю

<bool name="debug_mode">true</bool>
  • ApplicationProjectDEBUG

Использовать ApplicationProject Overide AndroidManifest и другие XML-файлы с разработка конкретного конфига В values ​​/ refs.xml добавляю

<bool name="debug_mode">true</bool>
  • ApplicationProjectPROD

Использовать ApplicationProject Overide AndroidManifest и другие XML-файлы с специфичный для производства конфиг В values ​​/ refs.xml добавляю

<bool name="debug_mode">false</bool>

я подписываю APK из этого проекта, чтобы положить в магазин

0 голосов
/ 27 ноября 2010

Обычно вы будете использовать 1 или 2 устройства только для отладки. Таким образом, вы можете установить переключатель DEBUG на основе устройств? Таким образом, вы можете просто использовать IMEI.

  1. добавьте новый класс Application в ваш проект и сделайте так, чтобы он инициализировал поле (предположительно, поместите его в класс Const).

    В методе Applications onCreate вызовите Const.setupDebug(getApplicationContext());

  2. Реализация setupDebug, как это

    public class Const {

    private static boolean debug = false;
    
    
    public static boolean isDebug() {
        return debug;
    }
    
    
    private static void setDebug(boolean debug) {
        Const.debug = debug;
    }
    
    
    private static String [] DEBUG_DEVICES = new String[] {
            "000000000000000", "gfjdhsgfhjsdg" // add ur devices
    };
    
    
    public static void setupDebug(Context context) {
        Arrays.sort(DEBUG_DEVICES);
    
    
    <pre><code>TelephonyManager mTelephonyMgr = (TelephonyManager)
            context.getSystemService(Context.TELEPHONY_SERVICE);
    String imei = mTelephonyMgr.getDeviceId();
    if (imei == null) imei = "000000000000000";
    
    
    if(Arrays.binarySearch(DEBUG_DEVICES, imei) &gt; -1) {
        setDebug(true);
    }
    
    }

    }

  3. Переключение с постоянного поля на постоянное Метод.

    Const.isDebug ()

...