我试图在我的应用程序中叠加两个图像,但它们似乎在我的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) 我认为必须存在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.IncrementalTaskAction.doExecute(IncrementalTaskAction.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
看似与该问题相同的根本原因,但那里的答案对我不起作用。我有一个自定义的源集commonTest,用于在test和androidTest源集之间共享某些测试实用程序代码。这是我相关的项目配置:
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
我希望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 …
这是在我从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使用的限制元空间
问题本身并不是最有帮助的。
当我在三星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启动)时,我没有收到此警告.
这种情况经常发生,但这次我似乎无法解决它.项目从命令行构建良好.这是错误:
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版本" 不是一个解决方案,因为这个问题仍然存在.此问题的当前解决方法是"暂时"禁用测试覆盖率.由于该问题最初是在6个月前报告的(尽管它被分类为"关键"),但解决方法不仅是坏的,而且不是暂时的.
这让我很生气.我的项目刚刚编译好了.我在其他地方做了一些小改动,现在我收到了这个错误.这是完整的错误消息:
找不到与给定名称匹配的资源(在'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_alignParentBottom和layout_marginBottom)在同一视图中不能很好地混合.
我还应该指出,这也发生在早期,但我刚刚删除了给AndroidStudio这样一个问题的引用,而不是试图修复它.然而,这太重要了,不能那样挥之不去.
试图让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) 目标
在RunListener使用 Espresso 运行 Android 仪器测试时,在测试失败时自定义执行自定义操作。
tl;博士
InstrumentationInfo.metaData是null,即使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)
这没有任何影响。通过各种方式,我发现这些代码行(由清单使用AndroidJUnitRunner并RunnerArgs从清单中获取自定义元数据参数)
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
我有一个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) 我的启动器图标没有出现在我的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 ×11
eclipse ×2
bash ×1
curl ×1
dex ×1
gradle ×1
image ×1
junit ×1
listadapter ×1
metadata ×1
metaspace ×1
package ×1
refactoring ×1
searchview ×1
source-sets ×1
xml ×1