如何使用 Android 库项目,并覆盖“最终项目”中的某些类。
也就是说,我想引用一个库项目,同时,改变一些代码..
可能并不完全是 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 视图注入到布局中。
希望有帮助。