小编Aut*_*pps的帖子

在android中覆盖两个图像以设置imageview

我试图在我的应用程序中叠加两个图像,但它们似乎在我的canvas.setBitmap()线上崩溃.我究竟做错了什么?

private void test() {
    Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.t);
    Bitmap mBitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.tt);
    Bitmap bmOverlay = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), mBitmap.getConfig());
    Canvas canvas = new Canvas();
    canvas.setBitmap(bmOverlay);
    canvas.drawBitmap(mBitmap, new Matrix(), null);
    canvas.drawBitmap(mBitmap2, new Matrix(), null);
    testimage.setImageBitmap(bmOverlay);
}
Run Code Online (Sandbox Code Playgroud)

android image

98
推荐指数
3
解决办法
14万
查看次数

Android:v7的编译错误支持lib 27.1.0"程序类型已存在"android.support.v7.recyclerview.extensions.ListAdapter

我认为必须存在27.1.0 v7支持lib的错误,刚刚发布.更新我的项目以使用它(从26.1.0)后,我不断收到此编译错误:

任务:app:transformDexArchiveWithDexMergerForRegularDebug FAILED D8用于合并dex.程序类型已存在:android.support.v7.recyclerview.extensions.ListAdapter

FAILURE:构建因异常而失败.

  • 出了什么问题:任务执行失败':app:transformDexArchiveWithDexMergerForRegularDebug'.com.android.build.api.transform.TransformException:com.android.tools.r8.errors.CompilationError:程序类型已存在:android.support.v7.recyclerview.extensions.ListAdapter

  • 尝试:使用--info或--debug选项运行以获取更多日志输出.

  • 例外情况是:org.gradle.api.tasks.TaskExecutionException:任务':app:transformDexArchiveWithDexMergerForRegularDebug'的执行失败.在org.gradle上的org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) .api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)在org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)在org.gradle.api.internal .tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)在org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60)在org.gradle.api.internal.tasks.execution org.gradle.api.internal.tasks.execu上的.skipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)在org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter的org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)中的.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52).执行(SkipOnlyIfTaskExecuter.java:54)org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter. java:34)at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker $ 1.run(DefaultTaskGraphExecuter.java:248)org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)at org. gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)org.gradle.internal.progress.DefaultBuild 在Org.gradle.internal.progress.DefaultBupeOperationExecutor.run上的OperationExecutor.execute(DefaultBuildOperationExecutor.java:199)org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)在org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)在org.gradle.execution.taskgraph .DefaultTaskPlanExecutor $ TaskExecutorWorker.access $ 200(DefaultTaskPlanExecutor.java:79)org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1.execute(DefaultTaskPlanExecutor.java:104)at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1.执行(DefaultTaskPlanExecutor.java:98)org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.jav)一:626)在org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581)在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)在org.gradle.internal .concurrent.ExecutorPolicy $ CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)在org.gradle.internal.concurrent.ManagedExecutorImpl $ 1.run(ManagedExecutorImpl.java:46)在org.gradle.internal.concurrent.ThreadFactoryImpl $ ManagedThreadRunnable.run( ThreadFactoryImpl.java:55)引起:java.lang.RuntimeException:com.android.build.api.transform.TransformException:com.android.tools.r8.errors.CompilationError:程序类型已存在:android.support.v7.在com.android中的com.android.builder.profile.Recorder $ Block.handleException(Recorder.java:55)上的recyclerview.extensions.ListAdapter位于com.android的com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104). build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:213)在org.gradle.api上的org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)org.gradle.api.internal.project.taskfactory.IncrementalTask​​Action.doExecute(IncrementalTask​​Action.java:46) .internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)位于org.gradle.api.internal.tasks的org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) .execution.ExecuteActionsTaskExecuter $ 1.run(ExecuteActionsTaskExecuter.java:121)org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute( DefaultBuildOperationExecutor.java:328)在org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)在org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)处或 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)中的g.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)... 29更多引起:com.android.build.api.transform.TransformException:com.android.tools.r8.errors.CompilationError:程序类型已存在:com.sandand.build中的android.support.v7.recyclerview.extensions.ListAdapter. com.android.build.gradle.internal的com.android.build.gradle.internal.pipeline.TransformTask $ 2.call(TransformTask.java:222)中的gradle.internal.transforms.DexMergerTransform.transform(DexMergerTransform.java:230) .pipeline.TransformTask $ 2.call(TransformTask.java:218)at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)... 41更多引起:com.android.tools.r8.errors …

android listadapter dex android-support-library android-recyclerview

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

Android Gradle插件无法识别SourceSet'commonTest'。也许您拼错了什么?

看似与该问题相同的根本原因,但那里的答案对我不起作用。我有一个自定义的源集commonTest,用于在testandroidTest源集之间共享某些测试实用程序代码。这是我相关的项目配置:

sourceSets {
    // This lets us write test utility code that can be used by both unit tests and android tests
    commonTest {
        java
    }
    test {
        java.srcDirs += commonTest.java.srcDirs
    }
    androidTest {
        java.srcDirs += commonTest.java.srcDirs
    }
}
Run Code Online (Sandbox Code Playgroud)

这在AGP 3.0.1上可以正常使用,但在AGP 3.1.0上无法使用。不再支持自定义源集吗?

android source-sets android-gradle-plugin android-sourcesets

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

Android和Fabric(Crashlytics)插件始终会生成UUID(Gradle Kotlin DSL)

我希望Fabric停止在每个版本上生成UUID。与Gradle的Groovy DSL一起使用的功能不适用于较新的Kotlin DSL。如何使用Kotlin DSL实现我的目标?

(版本4.10.2,结构1.25.4)

根据Fabric的文档,您可以将以下内容添加到应用程序的构建脚本中

android {
    buildTypes {
        debug {
          // Only use this flag on builds you don't proguard or upload
          // to beta-by-crashlytics
          ext.alwaysUpdateBuildId = false
Run Code Online (Sandbox Code Playgroud)

这可行。这样可以防止Fabric在每个调试版本上生成UUID。但是,如果将我的生成脚本来科特林DSL,下面工作

android {
    buildTypes {
        getByName("debug") {
          // Only use this flag on builds you don't proguard or upload
          // to beta-by-crashlytics
          ext.set("alwaysUpdateBuildId", false)
Run Code Online (Sandbox Code Playgroud)

Fabric现在忽略此值。

我尝试了以下方法:

project.ext.set("alwaysUpdateBuildId", false)
rootProject.ext.set("alwaysUpdateBuildId", false)
val alwaysUpdateBuildId by extra(false)
val alwaysUpdateBuildId by project.extra(false)
val alwaysUpdateBuildId by rootProject.extra(false)
Run Code Online (Sandbox Code Playgroud)

没有工作。

供进一步参考,生成此值的Gradle任务似乎已命名为:app:fabricGenerateResourcesDebug …

android google-fabric gradle-kotlin-dsl

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

升级到Gradle 5和Android Plugin 3.3之后,我的构建因“ Metaspace”而失败

这是在我从4.10.3升级到Gradle 5.0以及从3.2.1升级到3.3.0-rc03的Android Gradle插件时发生的(后者是因为它是正式支持Gradle 5的AGP的第一个版本)。

在此之后尝试同步项目时,出现错误。该错误仅说明:

* What went wrong:
Metaspace
Run Code Online (Sandbox Code Playgroud)

随后的版本也发出此错误,或者甚至更加晦涩,例如:

* What went wrong:
Could not initialize class com.gradle.scan.a.e.c
Run Code Online (Sandbox Code Playgroud)

这个问题没有明显的解决方案。搜索“ gradle metaspace”会显示Gradle 5的发行说明,它们本身仅在此处引用:

#7385 -Gradle使用的限制元空间

问题本身并不是最有帮助的。

android gradle metaspace

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

Android:糟糕的呼叫:在uid 10121下指定了pacakge****但它确实是-1

当我在三星Galaxy Nexus(Android 4.3,rooted)上运行我的应用程序时,我在我的catlog中收到一个奇怪的警告.我正在手机上使用logcat阅读日志.

背景:最近我使用Eclipse的重构工具更改了项目的包名称.我还浏览了每个文件并手动搜索旧包名称; 特别是,我更新了AndroidManifest.xml中的所有引用.我还使用Windows手动搜索包名,找到一些无关的引用,并更新它们.我的项目中有NOWHERE引用旧包名称.我还从头开始清理和重建项目.

这是警告:

11-25 14:20:35.684
Bad call: specified package com.old.package.name.appname under uid 10121 but it is really -1.
Run Code Online (Sandbox Code Playgroud)

在catlog的左栏中,错误的标题是:

374
AppOps
Run Code Online (Sandbox Code Playgroud)

此警告几乎立即刷新,有时每毫秒多次,并完全填满我的日志.

奇怪的是,当我在我的ASUS TF301(4.2,rooted)上安装应用程序时,我没有收到此警告.当我在我的PC上的模拟器上运行它(从Eclipse启动)时,我没有收到此警告.

eclipse refactoring android package

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

升级到Android Studio 2.3后无法同步Gradle

这种情况经常发生,但这次我似乎无法解决它.项目从命令行构建良好.这是错误:

Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection
Run Code Online (Sandbox Code Playgroud)

此意外错误的可能原因包括:

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


所提出的解决方案都没有奏效.我还尝试使缓存无效并手动删除Gradle缓存以强制重新下载依赖项和包装器.

编辑: "升级到最新的构建工具和Gradle版本" 不是一个解决方案,因为这个问题仍然存在.问题的当前解决方法是"暂时"禁用测试覆盖率.由于该问题最初是在6个月前报告的(尽管它被分类为"关键"),但解决方法不仅是坏的,而且不是暂时的.

android android-studio android-gradle-plugin

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

找不到与给定名称匹配的资源?

这让我很生气.我的项目刚刚编译好了.我在其他地方做了一些小改动,现在我收到了这个错误.这是完整的错误消息:

找不到与给定名称匹配的资源(在'layout_above'中,值为'@id/blank_view').

这是发生错误的XML文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageButton
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="@dimen/margin_right"
        android:layout_above="@id/blank_view"
        android:src="@drawable/button" />

    <View
        android:id="@+id/blank_view"
        android:layout_width="match_parent"
        android:layout_height="@dimen/margin_bottom"
        android:layout_alignParentBottom="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

如果该资源位于文件的正下方,那怎么能找不到名为"@ id/blank_view"的资源呢?

顺便说一句,我有这样的布局的原因是我希望ImageButton它与我的相对布局的底部对齐,但是偏移了一个边距.出于某种原因,这两个属性(layout_alignParentBottomlayout_marginBottom)在同一视图中不能很好地混合.

我还应该指出,这也发生在早期,但我刚刚删除了给AndroidStudio这样一个问题的引用,而不是试图修复它.然而,这太重要了,不能那样挥之不去.

xml android relativelayout android-studio

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

getActionView使用searchview返回null

试图让searchview在app上运行.

sdk min 17 max 22

在模拟器api上测试18

菜单xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">    
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never"/>
    <item android:id="@+id/search" 
        android:icon="@drawable/ic_action_search" 
        android:title="@string/search_title" 
        app:showAsAction="ifRoom|collapseActionView" 
        android:orderInCategory="200" 
        app:actionViewClass="android.support.v7.widget.SearchView">        
    </item> 
    <item android:id="@+id/scan" 
        android:title="@string/scan" 
        android:showAsAction="ifRoom"
        android:orderInCategory="300">        
    </item>   
</menu>
Run Code Online (Sandbox Code Playgroud)

onCreateOptionsMenu

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    // Inflate the menu; this adds items to the action bar if it is present.
    inflater.inflate(R.menu.material_toolbar, menu);

    SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setOnQueryTextListener(new OnQueryTextListener() {           
        @Override
        public boolean onQueryTextSubmit(String query) {
            Log.d(TAG, "onQueryTextSubmit");
            return false;
        }

        @Override
        public …
Run Code Online (Sandbox Code Playgroud)

eclipse android searchview

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

在 AndroidManifest 元数据中指定自定义 RunListener 不起作用

目标

RunListener使用 Espresso 运行 Android 仪器测试时,在测试失败时自定义执行自定义操作。

tl;博士

InstrumentationInfo.metaDatanull,即使ApplicationInfo.metaData有我的信息。为什么?

迄今为止的进展

我可以让我的 RunListener 使用以下 adb 命令:

adb shell am instrument -w -e listener com.myproject.test.runlisteners.CustomRunListener -e class com.myproject.test.ui.HomeActivityTest#testWillFail com.myproject.test/android.support.test.runner.AndroidJUnitRunner
Run Code Online (Sandbox Code Playgroud)

这是在此处的 AndroidJUnitRunner 文档中指定的。

但是,该文档还指出可以在AndroidManifest.xml元数据元素中指定 RunListener 。到目前为止,我一直没有成功地让它发挥作用。

AndroidManifest.xml

我在我的<application>元素中添加了以下内容main/AndroidManifest.xml

<meta-data
        android:name="listener"
        android:value="com.myproject.test.runlisteners.CustomRunListener" />
Run Code Online (Sandbox Code Playgroud)

这没有任何影响。通过各种方式,我发现这些代码行(由清单使用AndroidJUnitRunnerRunnerArgs从清单中获取自定义元数据参数)

InstrumentationInfo instrInfo = pm.getInstrumentationInfo(
    getComponentName(), PackageManager.GET_META_DATA);
Bundle b = instrInfo.metaData;
Run Code Online (Sandbox Code Playgroud)

...还我一个null捆绑包。

我注意到生成的debug/AndroidManifest.xml没有我的元数据标签,因此,作为实验,我也将它添加到我的androidTest/AndroidManifest.xml文件中。看起来像这样:

<application
    android:name=".BaseApplication">

    <meta-data
        android:name="listener" …
Run Code Online (Sandbox Code Playgroud)

junit android metadata android-manifest android-instrumentation

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

Bash脚本,当我不希望它回显时

我有一个bash脚本,其中包装了一对curls,并通过其他一些内置函数进行管道传输。我想打印每个curl的结果,然后解析结果并发出包含其他信息的第三行。最终输出应如下所示:

https://e.thingzz.com/eqvjzc23xqo2s
https://e.thingzz.com/o7jlafrot2fok
https://e.thingzz.com/c/eqvjzc23xqo2s/o7jlafrot2fok
Run Code Online (Sandbox Code Playgroud)

相反,它看起来像:

https://e.thingzz.com/eqvjzc23xqo2s
https://e.thingzz.com/o7jlafrot2fok
/o7jlafrot2fokv.com/c/eqvjzc23xqo2s
Run Code Online (Sandbox Code Playgroud)

由于某种原因,它以前两行的确切长度进行换行。

脚本:

#!/usr/bin/env bash
function myCurl()
{
    curl ... | ... | ... 
    #omitted, results in printing a url like 'https://e.thingzz.com/UUID' 
}

# param validation omitted
URL1=$(myCurl "${1}")
URL2=$(myCurl "${2}")
# print both URLs
echo $URL1
echo $URL2

# Parse URLs to get ID at end
# I've also tried using `cut`, in case there were invisible characters?
# I don't really know what I'm talking about.
URLID1=$(echo $URL1 | …
Run Code Online (Sandbox Code Playgroud)

bash curl

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

启动器图标未出现在操作栏中

我的启动器图标没有出现在我的ActionBar中,尽管设置了android:icon属性(当我安装应用程序时,启动器出现在我的主屏幕上).注意:我正在使用片段,他们也提供了操作项 - 但这不应该影响主页图标集,对吗?

以下是我的清单中的一些相关代码:

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

    <application
        android:name=".MyApp"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name">

        ...etc...

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

来自styles.xml的代码:

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

来自menu_main.xml的代码,以获得良好的衡量标准:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">

    <!-- Note: my fragments also contribute action items. -->

    <item
        android:id="@+id/action_about"
        android:orderInCategory="100"
        android:title="@string/menu_item_about"
        app:showAsAction="never" />
</menu>
Run Code Online (Sandbox Code Playgroud)

以及MainActivity.java中的一些代码:

package com.mywebsite.myapp;

import android.support.v7.app.ActionBarActivity;
...etc...

public class MainActivity …
Run Code Online (Sandbox Code Playgroud)

android android-launcher android-actionbar-compat

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