0

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

也就是说,我想引用一个库项目,同时,改变一些代码..

4

1 回答 1

3

可能并不完全是 Android 库项目的全部内容,但您可以通过使用 java 语言本身的接口和类继承特性来实现。

库项目似乎可以很好地处理合并/覆盖来自子级父级的资源,并让您使用一个具有不同应用程序包名称的代码库。

鉴于您关于使用库项目拥有一个使用 AdMob 和一个不使用 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 视图注入到布局中。

希望有帮助。

于 2011-04-11T21:04:59.517 回答