小编Ris*_*ava的帖子

使用Robolectric测试自定义视图

我正在尝试使用Robolectric 2.1.1运行单元测试,我无法让它膨胀自定义布局(例如ViewPagerIndicator类).假设这是我的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="test"
            android:id="@+id/test_test"/>

    <com.viewpagerindicator.CirclePageIndicator
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

考虑一下我的测试类:

@RunWith(RobolectricTestRunner.class)
public class TestRoboActivityTest {
    private TestRoboActivity mActivity;

    @Before
    public void setUp() throws Exception {
        mActivity = Robolectric.buildActivity(TestRoboActivity.class).create().get();
    }

    @After
    public void tearDown() throws Exception {
        mActivity = null;
    }

    @Test
    public void testSanity() throws Exception {
        Assert.assertNotNull(mActivity);
    }
}
Run Code Online (Sandbox Code Playgroud)

执行'mvn clean test'会导致

Tests in error:
testSanity(TestRoboActivityTest): XML file .\res\layout\test.xml line #-1 (sorry, not yet implemented): Error inflating class com.viewpagerindicator.CirclePageIndicator

很酷,所以似乎还不支持自定义视图.在他们的网站上检查示例Robolectric项目,一个解决方案可能是从LayoutInflater扩展布局: …

android robolectric

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

Android - Sencha Touch 2 PhoneGap问题为4.0.x

我有Android HTC Amaze和Android HTC Desire.由PhoneGap包装的我的Sencha Touch 2应用程序非常适合Desire,但他们拒绝加载HTC Amaze 4.0.3.我在日志中遇到这种错误 -

08-24 17:08:37.577: E/chromium(16106): external/chromium/net/disk_cache/stat_hub.cc:190: [0824/170837:ERROR:stat_hub.cc(190)] StatHub::Init - App "appname" isn't supported.
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

android caching web-based chromium cordova

60
推荐指数
1
解决办法
1148
查看次数

有关Google Play应用资产加密的问题

从v4.1 Jelly Bean开始,Google为Google Play引入了一项新的应用程序资产加密功能.似乎在升级包含持久性数据的应用程序时出现了一些问题,这些问题是由apk目录中的更改引起的(旧的/data/app,现在是/mnt/asec).

因此,在Google Play上发布(或更新已发布的应用)时,对于OS 2.3+,

  • 我可以禁用此选项并发布未加密的应用程序吗?
  • 问题的当前状态是什么?有解决方法吗?

除了这个问题,提供额外的防盗版保护的想法似乎没问题,但是在文档的任何地方都有一些我无法解释的额外注意事项:

  • 那些发布到替代商店或通过OTA部署的应用程序呢?他们也可以加密吗?如果没有,那么如果有人可以从其他地方下载未加密的apk并直接反编译,那么在Google Play发布中造成如此大的痛苦的重点是什么?
  • 可以通过生根电话来打败它吗?
  • 为OS 4.0+提供的apks是唯一有保护的吗?如果是这样,那么,如果有人可以将未加密的apk下载到Gingerbread手机,用adb将其拉出并以通常的方式反编译,那又有什么意义呢?
  • 假设机制有效:备份应用程序(如Titanium Backup)或使用adb的手动apk备份怎​​么样?他们还会工作吗?
  • 性能:某些应用可能具有相当大的apk大小.这种机制会妨碍性能吗?操作系统每次加载时都会解密整个apk吗?

提前致谢

更新:
修改以包含指向Google代码问题的链接.
问题34880(关闭,但有些开发者仍抱怨;状态:未来发布)
问题35962(已关闭;状态:已发布)

更新#2:由第一期中的一位开发人员链接的此博客文章的
有趣信息.同样在这里,在德国.

用户和开发人员报告说,在最近几天,使用最新版Google Play(3.7.15)安装的应用程序的问题似乎已经消失.以前安装有问题的应用程序的用户需要卸载,然后免费重新下载.根据一份报告,新版Google Play现在再次将付费应用程序保存到/ data/app,这意味着Google暂时停用了复制保护功能.谷歌没有公开评论这个问题.该错误被标记为中等优先级,状态为"FutureRelease"以进行可能的修复.

encryption android apk google-play android-4.2-jelly-bean

42
推荐指数
1
解决办法
2139
查看次数

视频播放器使用appcompat-v7在Android中点亮模式

我正在将一个代码库从本机Holo(Theme.Holo等)移植到appcompat-v7(Theme.AppCompat等等).如果您不想阅读详细信息,最后一部分包含tl; dr.


问题

一切正常,但我有问题复制一个很容易使用旧ActionBar的行为.我有一个视频播放器,在风景中我希望它的行为像YouTube:隐藏(动画)播放器控件,应用栏和状态栏.在用户交互时,UI控件应该保持"熄灯"模式并返回正常状态.如果用户没有触摸屏幕X秒,则计时器将返回到熄灯模式.使用ActionBar的相同代码不能用Toolbar.

所以,我使用的是:

  • 不透明的状态栏
  • setSystemUiVisibility() 使用以下组合之一:
    • 默认: View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    • 熄灯: View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
  • minSdkVersion 是16岁
  • 显示和隐藏的动作条我简称show()hide()
  • 在app子栏上实现相同的行为我子类化Toolbar并添加了一个show()和一个hide()方法来做同样的事情(首先简单地使用setVisibility(),然后使用动画 - 得到相同的结果)

LAYOUT_STABLE做这样的appbar最终会在状态栏的背后,当然是(因为这意味着fitSystemWindows,由于appbar是视图层次结构中的普通视图和喜欢的动作条中,它是由该标志的影响是不是在装修这就是我在屏幕上看到的:

状态栏后面的App栏

不能立即清楚工具栏界限是什么,因为应用栏在黑暗中是黑暗的,但是你可以看到标题被剪切并且"未对齐".这是因为工具栏的大小正确但位于状态栏后面.我的主要问题是,此时没有公共API来获取状态栏高度,矩形或其他任何内容以垂直移动我的应用栏以显示状态栏下方.

测试主要是在LPX13D上的N5上进行的(在撰写本文时最新的Lollipop公共版本),但在Android 4.4上也可以看到相同的情况.


黑客的解决方案

也就是说,经过相当长的一段时间和一些失败的尝试使其以一种不太苛刻的方式工作(包括我自己试图将其置于装饰中的相当绝望的尝试),我采取了这种令人讨厌的方式使其工作:

  1. onResume:
    a.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE)即使我通常不这样做也会打电话(风景)
    b.注册一个OnPreDrawListener

  2. OnPreDrawListener:
    a.使用View root = getRootView().findViewById(R.id.my_root)
    b 获取根视图.获取根视图高度:( int rootTop = getAbsoluteViewTop(root) …

android media-player android-appcompat android-support-library android-toolbar

35
推荐指数
1
解决办法
913
查看次数

Volley的DiskBasedCache的性能问题

在Android的Photo Collage应用程序中,我使用Volley来加载图像.我正在使用具有50 mb存储空间的DiskBasedCache(包含在volley中),以防止多次重新下载相同的图像.

上次我检查DiskBasedCache包含大约1000个缓存条目.

当我的应用程序启动时,Volley调用mCache.initialize(),它将在我的Galaxy S4上花费大约10秒钟(!)来执行以下操作:

  1. 列出缓存文件夹中的所有文件
  2. 打开每个文件并阅读标题部分.

我发现在启动时读取1000多个文件并不是加载缓存索引的有效方法!:-)

从volley/toolbox/DiskBasedCache.java:

@Override
public synchronized void initialize() {
    if (!mRootDirectory.exists()) {
        if (!mRootDirectory.mkdirs()) {
            VolleyLog.e("Unable to create cache dir %s", mRootDirectory.getAbsolutePath());
        }
        return;
    }

    File[] files = mRootDirectory.listFiles();
    if (files == null) {
        return;
    }
    for (File file : files) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
            CacheHeader entry = CacheHeader.readHeader(fis);
            entry.size = file.length();
            putEntry(entry.key, entry);
        } catch (IOException e) {
            if (file != null) { …
Run Code Online (Sandbox Code Playgroud)

android caching android-volley

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

警告:无会话请求需要令牌但缺少应用程序ID或客户端令牌

使用适用于Android的FB SDK有时会在Logcat中引发错误.

谁知道原因?我的应用正在运行并获得批准(不在Google Play上).我也使用散列的东西,并在FB应用页面上列出我的主要活动和包名称.

android facebook

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

在Android-Studio中将本地javadoc添加到本地aar

有没有办法将jar中提供的javadoc附加到aar库?没有可用的源代码,并且这两个文件都存在于本地(不在存储库中).

通过以下方式添加aar:

repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compile(name:'library', ext:'aar')
}
Run Code Online (Sandbox Code Playgroud)

并且工作正常(除了无法添加文档).

我尝试了什么(并没有奏效):

  • 导航到aar中包含的类,并尝试通过"附加源"来访问javadoc
  • 添加包含doc = docs/library-javadoc.jar的library.aar.properties
  • 将javadoc.jar打包到classes.jar旁边的library.aar中

环境:
Android-Studio 0.8.2
gradle插件0.12

它可能不可能是ATM(请参阅此错误:https://code.google.com/p/android/issues/detail?id = 73087),但任何解决方法都将不胜感激.

android javadoc intellij-idea android-gradle-plugin aar

29
推荐指数
1
解决办法
2492
查看次数

当Project Build使用New API Level 21时,Android Project Fragment Transition抛出异常

例外情况是:

"无法解析L android/support/v4/app/FragmentTransitionCompat21 $ 1的超类;"

我正在尝试使用以下函数从片段管理器的片段返回堆栈中弹出最后一个片段转换:

getSupportFragmentManager().popBackStack(); ,

当我这样做时,函数调用抛出错误.只有当我使用New Android API Version 21作为Build目标时才会发生这种情况.

相同的代码适用于旧版API 20.

错误:找不到'android.support.v4.app.FragmentTransitionCompat21 $ 1'的超类

它似乎是'FragmentTransitionCompat21'基类中的内部类.

错误:

W/dalvikvm(1356): Unable to resolve superclass of Landroid/support/v4/app/FragmentTransitionCompat21$1; (1082)

W/dalvikvm(1356): Link of class 'Landroid/support/v4/app/FragmentTransitionCompat21$1;' failed

E/dalvikvm(1356): Could not find class 'android.support.v4.app.FragmentTransitionCompat21$1', referenced from method android.support.v4.app.FragmentTransitionCompat21.setEpicenter

W/dalvikvm(1356): VFY: unable to resolve new-instance 358 (Landroid/support/v4/app/FragmentTransitionCompat21$1;) in Landroid/support/v4/app/FragmentTransitionCompat21;
Run Code Online (Sandbox Code Playgroud)

有人发现类似错误吗?请帮忙解决这个问题,谢谢.

java android android-fragments android-5.0-lollipop

27
推荐指数
1
解决办法
3073
查看次数

如何使webview使用HTML5缓存清单?

在Android设备(包括4.4.2)上,默认的浏览器和Chrome支持HTML5缓存清单.但是,在这些相同的设备上,WebView组件似乎不支持HTML5缓存清单.有谁知道如何让WebView组件支持HTML5清单?

android webview

26
推荐指数
1
解决办法
7606
查看次数

'找不到样式mapViewStyle'错误仍然存​​在

我刚刚决定在几天前休息时,我已经在这个应用程序上工作了近一年(高级项目).我的应用程序是使用我的Windows 7 64位PC使用Eclipse版3.7.2 64bit定位Froyo Android 2.2开发的.到目前为止,我尝试过:

  • 重新排列清单文件中的uses-library标记
  • 重写map xml文件
  • 删除R.java文件并刷新
  • 将mapview元素放在布局中
  • 重新安装eclipse和android-sdk
  • 清理项目
  • 创建style.xml文件并引用它
  • 在实际设备上部署
  • 恢复到以前的代码

可能更多......

我的代码如下:gmap.xml

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="0xMbgnc-el963gCdpl547hdkgXUILTskZr-T5uvg" // random key posted here
/>
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.PubMe"
  android:versionCode="1"
  android:versionName="1.0">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-sdk android:minSdkVersion="8"/>


<application android:icon="@drawable/icon" android:label="@string/app_name">
    <uses-library android:name="com.google.android.maps" />
    <activity android:name=".PubMeActivity"
              android:label="@string/app_name"
              android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".MappingActivity"
              android:label="@string/app_name">
    </activity>

</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

我非常感谢任何提前帮助.

java eclipse android google-maps android-xml

24
推荐指数
1
解决办法
1725
查看次数