Android库项目

时间:2011-04-11 20:58:24

标签: android library-project

如何使用Android库项目,并覆盖“最终项目”中的某些类。

换句话说,我想引用一个库项目,同时改变一些代码..

1 个答案:

答案 0 :(得分: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视图注入到布局中。

希望有所帮助。