小编beh*_*lit的帖子

Android Studio 3.0 Canary 5 - 错误:无法加载类'org.gradle.api.internal.component.Usage'

我已经阅读了与此相关的所有现有堆栈问题,他们的解决方案对我没有帮助.

  • 自从所有AS更新超过2.3以来,此问题已经很明显.
  • 创建一个新项目是可以的并且构建
  • 我试图复制"新项目"中的所有值,但它仍然存在

错误:

错误:无法加载类'org.gradle.api.internal.component.Usage'.此意外错误的可能原因包括:

  • Gradle的依赖缓存可能已损坏(这有时会在网络连接超时后发生.)重新下载依赖项并同步项目(需要网络)
  • Gradle构建过程(守护程序)的状态可能已损坏.停止所有Gradle守护进程可以解决此问题.停止Gradle构建过程(需要重启)
  • 您的项目可能正在使用第三方插件,该插件与项目中的其他插件或项目请求的Gradle版本不兼容.
在损坏的Gradle进程的情况下,您还可以尝试关闭IDE,然后终止所有Java进程.

gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME 
distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-milestone-1-all.zip
Run Code Online (Sandbox Code Playgroud)

项目build.gradle

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-alpha5'
        classpath "io.realm:realm-gradle-plugin:0.89.1"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)

设置Gradle

Use default gradle wrapper
Run Code Online (Sandbox Code Playgroud)

模块设置

Compile Sdk Version: API 26
Build Tools Version: 26.0.0
Run Code Online (Sandbox Code Playgroud)

我相信这些都是最新的.我尝试过无效的缓存并重启/重启机器

android gradle android-studio

10
推荐指数
1
解决办法
6512
查看次数

分割动作事件 - 同时接受多个视图的输入

我试图让分裂触摸事件工作,这意味着能够在多个视图中分别检测触摸输入.

这是添加到蜂窝中的功能,可以使用兼容性库向后移植.这里有更多信息:http://developer.android.com/sdk/android-3.0.html - >向下滚动到"分裂触摸事件"

它基本上说: 以前,只有一个视图可以同时接受触摸事件.Android 3.0增加了对跨视图甚至窗口分割触摸事件的支持,因此不同的视图可以接受同时触摸事件.当应用程序面向Android 3.0时,默认情况下会启用拆分触摸事件.也就是说,当应用程序将android:minSdkVersion或android:targetSdkVersion属性的值设置为"11"时.

以下是我用来测试它的示例项目:https: //sites.google.com/site/droidbean/hologramlwp/downloadmodels/attachments/SplitMotionTest.rar ?attredirects=0&d=1

在项目中有2个图像视图,触摸顶部的图像视图会生成带有"指针"标记的Log.e事件,而底部视图会生成"指针2"但是您可以看到触摸顶视图然后用单独的手指触摸第2个图像视图两者都是触摸单独的视图)只生成姜饼第一个视图中的消息.

如果在蜂窝上运行相同的项目,它可以正常工作,并且两个视图都会生成各自的"指针"日志条目.

所以我的问题是,如何在运行姜饼或任何其他较低的Android版本的手机上获得相同的效果?

android views touch

7
推荐指数
1
解决办法
7705
查看次数

检测Android蓝牙应答/挂断按钮事件

我需要检测何时按下蓝牙设备上的"电话"按钮,大多数都会有一个按钮用于接听/挂断.

使用audioManager.registerMediaButtonEventReceiver()意图过滤器MEDIA_BUTTON,我能够检测到电话按钮的所有按钮除外(即:跳过下一个,跳过上一个,播放/暂停).

使用CALL或CALL_BUTTON过滤器不起作用(没有收到任何事件).

按钮的默认行为是断开音频并切换回耳机.在Skype应用程序中也会出现相同的行为,但是,当进行正常的GSM呼叫时,内置的电话应用程序正确处理按钮,并且可以回答和挂断呼叫.

我试图找到Phone应用程序如何处理这个但无法找到代码.

有谁知道如何正确检测蓝牙电话按钮事件?

android bluetooth button

6
推荐指数
1
解决办法
1086
查看次数

在Nougat上的webview中浏览基于资产的html文件

我正在将资产中的HTML文件加载到webview中.

html包含指向其他html资源文件的链接.单击链接可在SDK <24上正常工作,但FileUriExposedException在单击Nougat(SDK 24)设备上第二个html页面的链接时会产生错误.

将资产中的html加载到webview中的代码:

wbHelp.loadDataWithBaseURL("file:///android_asset/", readAssetFileAsString("Index.html"), "text/html", "UTF-8", null);
Run Code Online (Sandbox Code Playgroud)

和readAssetFileAsString是:

private String readAssetFileAsString(String sourceHtmlLocation)
{
    InputStream is;
    try
    {
        is = getContext().getAssets().open(sourceHtmlLocation);
        int size = is.available();

        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();

        return new String(buffer, "UTF-8");
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }

    return "";
}
Run Code Online (Sandbox Code Playgroud)

HTML可以是非常基本的.的index.html

<html><a href="Page2.html">Page 2</a></html>
Run Code Online (Sandbox Code Playgroud)

Page2.html

<html><h1>Page 2</h1>
Run Code Online (Sandbox Code Playgroud)

完整的错误日志是:

11-12 17:58:03.694 5831-5831/appname W/System.err: android.os.FileUriExposedException: file:///android_asset/Page2.html exposed beyond app through Intent.getData()
11-12 17:58:03.694 5831-5831/appname W/System.err:     at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)
11-12 17:58:03.694 5831-5831/appname W/System.err:     at android.net.Uri.checkFileUriExposed(Uri.java:2346) …
Run Code Online (Sandbox Code Playgroud)

android webview

6
推荐指数
2
解决办法
2107
查看次数

Android - 如何使用mockito UnitTest一个Logging类

我编写了一个类来管理android应用程序项目中的日志记录.LogManager基本上是android.util.log的包装器.它处理文件的记录,如果应用程序崩溃,则处理标准的调试日志.我想使用JUnit对类进行单元测试.

我已经尝试了以下但是它似乎没有产生我在阅读示例后所期望的结果:

LogManager.class(这是我用过的类的简化版本,用于演示目的)

public class LogManager implements ILogManager
{
     public void log(String tag, String message)
     {
           Log.e(tag, message);
     }
}
Run Code Online (Sandbox Code Playgroud)

这是我的测试课

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
@PrepareForTest({Log.class, LogManager.class})
public class LogManagerUnitTest
{

    @Test
    public void testLogConsoleInfo()
    {
        PowerMockito.mockStatic(Log.class);

        LogManager.getInstance().log(LogLevel.INFO, "test", "test");

        PowerMockito.verifyStatic(Mockito.times(1));
        Log.e(anyString(), anyString());
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是无论我把它放在哪里都会通过.例如:如果我用Log.wtf(...)代替最后一次调用,它仍然会通过.我会假设它应该失败,因为Log.wtf没有在静态类Log中调用?所以我的问题是,为什么这种方法不能按预期工作,这样做的正确方法是什么?

junit android mockito powermock

3
推荐指数
1
解决办法
4255
查看次数

Catch解雇BottomSheetDialogFragment

有没有办法解决BottomSheetDialogFragment的解雇/取消?

底层课程

public class ContactDetailFragment extends BottomSheetDialogFragment
{
    private BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback()
    {
        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState)
        {
            if (newState == BottomSheetBehavior.STATE_HIDDEN)
            {
                dismiss();
            }
        }

        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset)
        {
        }
    };

    @Override
    public void setupDialog(Dialog dialog, int style)
    {
        super.setupDialog(dialog, style);
        View contentView = View.inflate(getContext(), R.layout.fragment_contactdetail, null);

        dialog.setContentView(contentView);

        BottomSheetBehavior mBottomSheetBehavior = BottomSheetBehavior.from(((View) contentView.getParent()));
        if (mBottomSheetBehavior != null)
        {
            mBottomSheetBehavior.setBottomSheetCallback(mBottomSheetBehaviorCallback);
            mBottomSheetBehavior.setPeekHeight((int) DisplayUtils.dpToPixels(CONTACT_DETAIL_PEEK_HEIGHT, getResources().getDisplayMetrics()));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的东西不起作用

  • setupDialog …

android android-dialogfragment bottom-sheet

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

在具有自动标记功能的单独模块中使用木材

我想在单独的模块中使用 wood 来处理我的 Android 应用程序中的日志记录,以便可以从任何模块调用它并记录到内部文件。

问题是,当在单独的类中使用自动标记而不是直接调用木材日志方法时,自动标记不起作用。

例如,我有一个日志记录类,其方法为Logger.kt

fun d(message: String)
{
    Timber.d(message)
}
Run Code Online (Sandbox Code Playgroud)

但是当我从任何地方调用它时,它显然使用日志类作为标记,而不是调用该方法的类。

所以我的问题是,如何通过此方法自动传递调用类?我不想添加像“TAG = classname”这样的附加变量,因为在这种情况下我也可以使用正常的日志记录。

是否可以检索方法的调用类?或者有更好的方法来进行集中日志记录吗?主要目的是不必定义 TAG 变量,同时还能够稍后添加文件日志记录。

logging android kotlin timber-android

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