2011-04-11 84 views
0

如何使用Android庫項目,並覆蓋「最終項目」中的某些類。Android庫項目

換句話說,我想引用庫項目,並在同一時間,改變一些代碼..

回答

3

恐怕不太什麼的Android庫項目是一回事,但你可以通過使用實現這一java語言本身的接口和類繼承特性。

庫項目似乎很好地處理了子項中父項的合併/重寫資源,並讓您使用具有不同應用程序包名稱的一個代碼庫。

鑑於有關使用庫項目有使用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; 
    } 
} 

您只會將此類添加到庫項目中。在這三個項目中,您需要添加一個條目,/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代碼不會實際嘗試獲得如果視圖不可見,則爲廣告。

如果您真的不想爲AdMob jar和完整版中所需的清單權限添加額外的138K,則可以使用更優雅的方法來執行此操作,但會涉及在AdMob內容中使用某種包裝並改變版本之間的xml佈局(以包含AdMob視圖或不包含)或以編程方式將AdMob視圖注入佈局。

希望有所幫助。

+0

如何使用「接口和類繼承」(只是快速瀏覽)...? – yydl 2011-04-11 21:07:14

+0

好吧,它是所有面向對象語言中的一箇中心概念,可能很難給出快速概述。你可以從http://download.oracle.com/javase/tutorial/java/IandI/subclasses.html開始,或者如果你可以舉一個你想做的事情的例子,也許我們可以提供幫助。 – mmeyer 2011-04-11 21:30:37

+0

但是我不能在庫中引用這些子類,因爲它們只會在決賽中存在。 – yydl 2011-04-11 22:42:55