2011-04-11 2 views
0

어떻게 Android 라이브러리 프로젝트를 사용하고 "최종 프로젝트"의 특정 클래스를 덮어 쓸 수 있습니까? 즉Android 라이브러리 Project

아마 안드로이드 라이브러리 프로젝트 모두에 대해 있지만 사용에 의해 것을 달성 할 수 확실히 어떤

답변

3

.. 나는 라이브러리 프로젝트를 참조 할과 동시에, 코드의 일부를 변경 자바 언어 자체의 인터페이스와 클래스 상속 기능.

라이브러리 프로젝트는 자식의 부모로부터 자원을 병합/재정의하고 다양한 응용 프로그램 패키지 이름으로 하나의 코드베이스를 사용하도록하는 것으로 잘 보입니다.

감안할 때 AdMob을하고, 나는이 대답을 개정 한 나던 하나를 사용하는 응용 프로그램의 한 버전을 사용하는 라이브러리 프로젝트를 사용하는 방법에 대한 업데이트 된 코멘트 ...

~ 당신이 마음는 AdMob 라이브러리 포장을 (그나마 가정 138KB)를 전체/유료 버전과 함께 사용하는 경우 가장 간단한 방법은 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; 
    } 
} 

이 클래스는 라이브러리 프로젝트에만 추가됩니다.

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

그것은이 문자열의 값이 라이브러리 프로젝트에 어떤 문제가 나던,하지만 당신은거야 : 프로젝트의 세에서는 같은 /res/Strings.xml에 항목을 추가해야합니다 FULL 및 LITE를 사용하여 유료 버전과 광고 지원 버전에서 다르게 지정하십시오.

마지막으로,이 값에 반응하여 활동이에서 onCreate() 또는 onResume()에서이 같은 전화를 만들기 위해 다음의 AdMob 코드 못해 실제로 얻을려고으로

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

이 AdMob을 잘 작동합니다 보기가 보이지 않으면 광고.

AdMob jar에 대한 추가 138K와 전체 버전에서 필요한 매니페스트 권한을 갖고 싶지 않다면 더 세련된 방법이 있지만 AdMob 항목 주위에 일종의 래퍼를 사용하는 것이 좋습니다 버전 간 XML 레이아웃을 변경하거나 (AdMob보기 포함 여부) AdMob보기를 프로그래밍 방식으로 레이아웃에 삽입 할 수 있습니다.

희망이 있습니다.

+0

"인터페이스 및 클래스 상속"(간단한 개요)을 어떻게 사용할 수 있습니까? – yydl

+0

글쎄, 그것은 모든 객체 지향 언어에서 핵심적인 개념이며 일종의 간략한 개요를 제공하기가 어렵습니다. http://download.oracle.com/javase/tutorial/java/IandI/subclasses.html로 시작하거나 할 수있는 일의 예를 제시 할 수 있다면 도움이 될 것입니다. – mmeyer

+0

그러나 결승전에만 존재하기 때문에 라이브러리의 해당 하위 클래스를 참조 할 수는 없습니다. – yydl