Android Library Project - PullRequest
       5

Android Library Project

0 голосов
/ 12 апреля 2011

Как использовать проект библиотеки Android и перезаписать определенные классы в «финальном проекте».

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

1 Ответ

3 голосов
/ 12 апреля 2011

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

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

Учитывая ваш обновленный комментарий об использовании библиотечных проектов, чтобы иметь одно издание приложения, которое использует AdMob, и одно, которое не использует, я пересмотрел этот ответ ...

Если вы не возражаете упаковать библиотеку AdMob (~ 138 КБ) в свое полное / платное издание, самое простое, что можно сделать, - это расширить класс Applcation и в нем объявить перечисление и статический метод, чтобы решить, должны ли объявления AdMob быть показано.

public class Application extends android.app.Application
{    
    public enum EditionType { LITE, FULL};      
    public static int getAdVisibilityForEdition(Context ctx)
    {
       if (EditionType.valueOf(ctx.getString(R.string.edition)) == EditionType.FULL)
       {
        return View.GONE;
       }
       return View.VISIBLE;
    }
}

Вы добавите этот класс только в проект библиотеки. Во всех трех проектах вам нужно добавить запись в /res/Strings.xml следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="edition">LITE</string>
</resources>

Неважно, какое значение имеет эта строка в проекте библиотеки, но вы измените его в платных и поддерживаемых рекламой изданиях, используя FULL и LITE соответственно.

Наконец, чтобы ваши действия реагировали на эти значения, вызовите что-то вроде этого в вашем onCreate () или onResume ():

View ad = (View)this.findViewById(R.id.your_adMob_view_id)
ad.setVisibility(Application.getAdVisibilityForEdition
                 (this.getApplicationContext()));

Это будет хорошо работать с AdMob, поскольку код AdMob фактически не будет пытаться получить объявление, если вид не виден.

Если вы действительно не хотите иметь дополнительные 138 КБ для фляги AdMob и необходимые разрешения для манифеста в полной версии, есть более изящные способы сделать это, но для этого нужно использовать какую-то оболочку вокруг AdMob и либо изменяя макеты xml между выпусками (включая представление AdMob или нет), либо внедряйте представление AdMob в макет программно.

Надеюсь, это поможет.

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