小编Hon*_*ong的帖子

错误:应定义“颜色”属性

颜色选择器定义如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true">
        <shape
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="oval">
            <solid android:color="@color/gray" />

        </shape>
    </item>
    <item android:state_focused="true">
        <shape
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="oval">
            <solid android:color="#66666666" />

        </shape>
    </item>
    <item>
        <shape
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="oval">
            <solid android:color="@color/translucent_icon_background" />
        </shape>
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)

在 Android Studio 中,“item”被标记为红色,表示出现错误,如下图所示: 在此输入图像描述

根据测试,该应用程序运行良好。我之所以这么问,是因为我担心由于该错误,在某些设备上可能会出现问题。有人能解释一下这个错误吗?更具体地说,它可以被忽略吗?

android-selector

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

偶尔出现 java.io.IOException:仅在 Android 7.0 上不允许通过 DatagramSocket.send() 进行操作

以下代码在所有 Android 设备 Android 7.0 上几乎 100% 运行良好:

DatagramSocket clientSocket = new DatagramSocket();
clientSocket.setSoTimeout(4000);
clientSocket.setReuseAddress(true);        
clientSocket.setBroadcast(true);
...
DatagramPacket dpSend = new DatagramPacket(baSendData, baSendData.length, InetAddress.getByName("239.255.255.250"), 3702);
clientSocket.send(dpSend);
Run Code Online (Sandbox Code Playgroud)

在 Android 7.0 上,仅在 Android 7.0 上,clientSocket.send(dpSend) 偶尔会生成以下错误。我想强调“偶尔”。大多数时候它工作得很好。

我想知道是否有人可以提供对 Android 7.0 的任何见解,以阐明为什么异常仅发生在 Android 7.0 上。

sockets multicast datagram multicastsocket android-7.0-nougat

5
推荐指数
0
解决办法
858
查看次数

有没有办法在 Android Studio 中为 java 文件提取带有自动生成的资源名称的字符串?

在 Android Studio 中,Alt + Enter > java 文件中的“提取字符串资源”将打开以下窗口:

在此输入图像描述

请注意,资源名称字段为空。但是,布局 XML 文件的窗口将如下所示: 在此输入图像描述

请注意,资源名称字段会自动填充。

如何也用自动生成的 java 文件名称填充资源名称字段?

它认为在当前版本的 Android Studio (2.1) 之前,所有类型的文件都会自动填充资源名称,但我可能是错的。

[编辑]2018-05-29:我想强调问题是关于“自动生成的资源名称”,而不是关于是否可以提取硬编码字符串。从java文件中提取硬编码字符串一直是可用的,但自动名称生成不存在。

android-resources android-studio android-studio-2.1

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

为什么AppCompatActivity.onMenuOpened菜单(int featureId,菜单菜单)为空?

Android应用程序具有以下代码:

public class FooActivity extends AppCompatActivity{
   @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
    }
}
Run Code Online (Sandbox Code Playgroud)

单击3点溢出菜单按钮时,菜单会正常显示,并调用此MenuOpened(int featureId,菜单菜单),但菜单为空.这是正常的吗?

android android-menu

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

.NETStandard1.6 PCL出错:"您的项目未引用".NETPlatform,Version = v5.0"框架"

为了帮助重现该问题,需要执行以下步骤在Visual Studio 2015中创建.NETStandard1.6 PCL:

  1. 创建一个新的类库(适用于iOS,Android和Windows).
  2. 在"属性"页面中,单击"Target .NET Platform Standard".
  3. 将.NETStandard表单.NETStandard1.1更改为.NETStandard1.6
  4. 构建这个空项目.

发生以下错误:

>C:\Program Files (x86)\MSBuild\Microsoft\NuGet\Microsoft.NuGet.targets(140,5): error : Your project is not referencing the ".NETPlatform,Version=v5.0" framework. Add a reference to ".NETPlatform,Version=v5.0" in the "frameworks" section of your project.json, and then re-run NuGet restore.
Run Code Online (Sandbox Code Playgroud)

以下是project.json:

{
  "supports": {},
  "dependencies": {
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1",
    "NETStandard.Library": "1.6.0"
  },
  "frameworks": {
    "netstandard1.6": {}
  }
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供一个关于如何在"框架"部分中添加对".NETPlatform,Version = v5.0"的引用的提示吗?我尝试了以下方法:

"donet5.4":{}

"donet5.0":{}

两者都不起作用.

.net .net-standard

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

Dictionary.Keys.Contains(key)和Dictionary.ContainsKey(key)之间有什么区别吗

假设:

Dictionary<Guid, MyClass> dict;
Run Code Online (Sandbox Code Playgroud)

两者之间有什么区别吗?

dict.Keys.Contains(key)
Run Code Online (Sandbox Code Playgroud)

dict.ContainsKey(key)
Run Code Online (Sandbox Code Playgroud)

我认为没有区别,但我现在不确定.

.net c#

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

如何解决由番石榴引起的错误:程序类型已存在:com.google.common.util.concurrent.internal.InternalFutures

AAR库已使用com.google.guava.

如果应用在其build.gradle中包含以下内容:

api 'com.google.guava:guava:27.0-android'
Run Code Online (Sandbox Code Playgroud)

构建应用程序会生成以下错误:

Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: ...
  Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
  Program type already present: com.google.common.util.concurrent.internal.InternalFutures
Run Code Online (Sandbox Code Playgroud)

如果我不包含"api'com.google.guava:guava:27.0-android'",则可以构建应用程序,但是当它到达使用Guava方法时,它会出现java.lang.NoClassDefFoundError的运行时错误: Iterables.find

guava android-guava

4
推荐指数
2
解决办法
1982
查看次数

如何使用 JDK 12 运行 Apache CXF wadl2java?

以下命令曾经完美地工作:

C:\tools\apache-cxf-3.3.1\bin\wsdl2java -client -d generated foo.wsdl
Run Code Online (Sandbox Code Playgroud)

它不再适用于最新版本的 JDK - 12。我已经下载了最新版本的 Apache CXF,但仍然遇到相同的错误:

-Djava.endorsed.dirs=C:\tools\apache-cxf-3.3.1\bin\..\lib\endorsed is not supported. Endorsed standards and standalone APIs
in modular form will be supported via the concept of upgradeable modules.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)

谁能提供有关如何解决此问题的提示?

cxf wsdl2java java-12

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

proguard-rules.pro似乎不适用于R8

我今天早些时候将Android Studio升级到3.4,并且第一次使用默认的收缩器R8。我将proguard-project.txt图书馆项目的内容复制到proguard-rules.proproguard-project.txt完美地为这个项目工作,生成了供其他应用程序项目使用的aar文件。

文件proguard-rules.pro似乎并没有被使用。该项目的内容如下build.gradle

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
                    'proguard-rules.pro'
            signingConfig signingConfigs.Release
        }
        debug {
            signingConfig signingConfigs.Debug
        }
    }
Run Code Online (Sandbox Code Playgroud)

proguard-rules.pro 具有以下内容:

# Preserve all public classes, and their public and protected fields and methods.
-keep public class * {
    public protected *;
}
Run Code Online (Sandbox Code Playgroud)

公用方法的名称根本不保留: 在此处输入图片说明

谁能提供解决此问题的技巧?

android android-proguard android-r8 r8

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

有没有一种方法可以防止Android应用代码收缩器R8更改行号?

Android Studio 最近默认开始使用R8代替ProGuard。

来自ProGuard的堆栈跟踪很容易理解,即使代码被混淆,也无需使用任何工具。让我们使用以下示例:

 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
    at net.foo.anroid.Foo.wb.d(SourceFile:453)
    at net.foo.anroid.Foo.wb.a(SourceFile:213)
    at net.foo.anroid.Foo.wb.n(SourceFile:103)
    at net.foo.anroid.Foo.qa.run(Unknown Source:2)
    at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud)

通常,我确切知道net.foo.anroid.Foo.wb与哪个文件相对应,并且行号(例如453、213 ...)是ProGuard源文件中的实际行号。

但是,对于R8,找出哪一行的唯一方法是在mapping.txt中查找它们。

这确实是一个很大的麻烦。如果没有很好的方法从堆栈跟踪中快速找到源代码,仅出于这个原因,我将返回ProGuard。

有没有办法防止R8更改行号?

android android-r8

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