小编mja*_*ama的帖子

最佳实践:扩展或覆盖Android库项目类

我们正在使用Android库项目在Android应用程序的不同构建(目标)之间共享核心类和资源.每个特定目标的Android项目都引用了Core库项目(在幕后,Eclipse创建并引用了引用的库项目中的jar).

覆盖图像和XML布局等资源非常简单.放置在目标项目中的资源文件(例如应用程序图标或XML布局)会在构建应用程序时自动覆盖核心库的资源,并使用相同的名称.但是,有时需要重写类以启用特定于目标的行为.例如,亚马逊目标偏好设置屏幕不能包含指向Google Play应用页面的链接,需要更改亚马逊项目的preferences.xml和偏好设置活动类.

目标是减少目标项目中重复代码的数量,同时尽可能从Core库中删除尽可能多的特定于目标的代码.我们已经提出了几种方法来实现特定于不同目标的逻辑:

  1. 在Core库类中编写特定于目标的函数,并使用if/switch块根据产品SKU选择行为.这种方法不是非常模块化,并且使核心库代码库膨胀.
  2. 扩展目标项目中的特定Core类,并根据需要覆盖基本(Core)类函数.然后保留对Core库中基类对象的引用,并使用扩展类对象实例化它(从如何覆盖Android库项目中的类?)

是否有其他策略来覆盖或扩展Android库项目类?在Android应用目标中共享和扩展常见类的一些最佳做法是什么?

java architecture eclipse android design-patterns

32
推荐指数
1
解决办法
1万
查看次数

使用基于Android的应用程序中的本机PlayBook浏览器打开URL

当在Android JVM中运行的PlayBook应用程序中打开链接时(即,使用用于Android开发工具的BlackBerry Plug-in移植到PlayBook的Android应用程序),将启动Android WebView活动以显示Web正在运行的应用程序中的页面内 从这里,用户可以从PlayBook菜单中选择"在PlayBook Browser中查看",以在本机PlayBook浏览器中打开URL.

是否可以绕过Android WebView活动并使用本机PlayBook浏览器打开URL?

不成功的方法记录在黑莓开发者支持论坛: http://supportforums.blackberry.com/t5/BlackBerry-Plug-in-for-Android/Possible-to-launch-a-URL-to-the-PlayBook-浏览器从-AN-的Android/MP/1629005

android blackberry qnx blackberry-playbook

11
推荐指数
1
解决办法
692
查看次数

NoSuchMethodError上的Robolectric HTTP测试失败:org.apache.http.impl.client.DefaultRequestDirector

我正在尝试使用Robolectric测试框架的HTTP层测试HTTP调用.

我的测试类已经使用RunWith(RobolectricTestRunner.class)进行了注释.这是一个示例HTTP测试用例:

@Test
public void testHttpGet() {
    Robolectric.addPendingHttpResponse(200, "All your requests are belong to Robolectric");
    String response = ConnectionUtils.sendRequest();
    assertThat(response, equalTo("All your requests are belong to Robolectric"));
}
Run Code Online (Sandbox Code Playgroud)

此测试失败,JUnit Failure Trace报告以下DefaultRequestDirector异常(源自sendRequest()调用):

java.lang.NoSuchMethodError: org.apache.http.impl.client.DefaultRequestDirector.<init>(Lorg/apache/commons/logging/Log;Lorg/apache/http/protocol/HttpRequestExecutor;Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/conn/ConnectionKeepAliveStrategy;Lorg/apache/http/conn/routing/HttpRoutePlanner;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/client/HttpRequestRetryHandler;Lorg/apache/http/client/RedirectHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/UserTokenHandler;Lorg/apache/http/params/HttpParams;)V
at org.apache.http.impl.client.AbstractHttpClient.createClientRequestDirector(AbstractHttpClient.java:660)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:625)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
Run Code Online (Sandbox Code Playgroud)

可能导致Apache类抛出异常的任何想法?

使用当前最新的库,robolectric-1.2-20120730.165026-113-jar-with-dependencies.jar.

junit android robolectric

2
推荐指数
1
解决办法
1490
查看次数