2011-04-11 58 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