标签: android

完整备份内容xml文件应该为空还是根本不添加以包含所有内容?

所以我在应用程序清单中添加了一些东西,我看到我的应用程序标签上有一个警告:

在SDK版本23及更高版本上,您的应用数据将在应用安装时自动备份和恢复.考虑添加属性android:fullBackupContent以指定@xml资源,该资源配置要备份的文件.

然后我搜索了那个.显然,只有2个标签:<include><exclude>.我不想从备份中排除任何文件,因为我没有任何本地依赖文件,我不需要任何<include>标签

<include>: 指定要备份的一组资源,而不是让系统默认备份应用程序中的所有数据.

当我看到如果我没有放任何<include>标签,那么系统将会back up all data in your app by default,这正是我想要的.

现在我有了这个问题:我应该添加backup_content.xml文件,但是因为默认设置是好的,所以是空的,或者根本不添加文件?(在这种情况下Android Studio会抱怨)

xml backup android

36
推荐指数
4
解决办法
9386
查看次数

Jack(Java Android编译器工具包)将如何影响Scala开发人员

现在宣布杰克谷歌澄清了Java与Android相关的可预见的未来.但是对Scala和其他基于JVM的语言开发人员有什么影响.特别是:

  1. 由于自己的编译器产生Java字节码,Scala确实很神奇.但Jack工具链不处理字节码.生成的字节码会获得Jack处理的任何优化优势吗?
  2. 从Scala 12开始,仅支持Java 8+.那就是生成的字节码也是Java 8+.杰克可以使用Java 8字节码(没有或有限制)?
  3. 可以使用新支持的Java 8功能来开发较旧的Android版本(minSdkVersion <'N'),还是应该为每个Java版本维护单独的分支?(文件中不清楚).

所有这些问题归结为一个问题:未来可以将Scala用于Android开发而不会牺牲新Scala功能和新Android工具链的优势吗?

相关阅读:

请在评论或答案中分享相关链接

相关问题:

有关:

请投票给Jack工具功能请求:


编辑:

我试图推理(不回答)我的问题,希望如果我错了,专家会纠正我.

下面是一个假设的Jack构建流程,其中包含一些额外的块,这些块是根据我的逻辑和我从可用文档中学到的内容添加的.

基本假设是Dalvik支持Java 7字节码指令.如果这是正确的Java 8指令不能直接传递给Dalvik,它们应该以某种方式转换为Java 7.(可能类似于Scala编译器总是这样做).

问题是转型发生在哪里?似乎Jill现在不能处理Java 8字节码,因此可能发生在假设流程的块(3)中.如果这是正确的,那么只有Java源项目文件需要进行转换,并且对第二个问题的回答是 - 否则,在Jill能够执行之前,不能使用库中的Java 8类(如果可能的话) .那就是我们不能使用Scala 12+.

如果在块(6)中执行所有代码优化而不是对第一个问题的答案是 - 是.转换为库.jar的Scala代码可以从Jack优化中受益.但初步应将其转换为.jayce(类似AST的表示),这将增加构建时间.

最后,Jack生成.dex Dalvik字节码,以保持与较旧的Dalvik运行时兼容(ART也使用Dalvik字节码).因此,三维问题的答案是:是的,可以使用Java 8功能.但仅限于项目Java源代码.App仍与任何运行时兼容.但是由于转换为Java 7(Dalvik字节码),Java 8的优势被删除.


在此输入图像描述

android scala java-8

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

如何清除LiveData存储值?

根据LiveData文档:

LiveData类具有以下优点:

...

始终是最新数据:如果生命周期再次启动(如从后端堆栈返回到启动状态的活动),它将收到最新的位置数据(如果尚未生成).

但有时候我不需要这个功能.

例如,我在ViewModel中跟随LiveData,在Activity中跟踪Observer:

//LiveData
val showDialogLiveData = MutableLiveData<String>()

//Activity
viewModel.showMessageLiveData.observe(this, android.arch.lifecycle.Observer { message ->
        AlertDialog.Builder(this)
                .setMessage(message)
                .setPositiveButton("OK") { _, _ -> }
                .show()
    })
Run Code Online (Sandbox Code Playgroud)

现在每次旋转后都会出现旧的对话框.

有没有办法在处理后清除存储的值或者根本没有使用LiveData?

android android-livedata android-architecture-components

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

警告:警告:注释处理器'android.arch.lifecycle.LifecycleProcessor'支持的源版本'RELEASE_7'小于-source'1.8'

尝试使用Android Studio 3 Canary 5与Architecture Components和Kotlin构建示例时会发出此警告.

谁能告诉我原因?

谢谢,Ove

编辑#1:这是Dan Lew不久前制作的一个样本

https://github.com/dlew/android-architecture-counter-sample

的build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 25
    buildToolsVersion rootProject.ext.buildToolsVersion
    defaultConfig {
        applicationId "net.danlew.counter"
        minSdkVersion 23
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
    compile "com.android.support:recyclerview-v7:${rootProject.ext.supportLibVersion}"
    compile "com.android.support:design:${rootProject.ext.supportLibVersion}"
    compile "com.android.support:cardview-v7:${rootProject.ext.supportLibVersion}"
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-studio android-architecture-components

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

无法在频道"null"上发布通知目标Api为26

两个日志显示

1:对于音量控制以外的操作,不推荐使用流类型

2:请参阅setSound()的文档,了解使用什么来代替android.media.AudioAttributes来限定播放用例

显示这个

android android-notifications android-8.0-oreo

36
推荐指数
3
解决办法
4万
查看次数

关于最新的android studio 3.0.1的Gradle 4.1问题

虽然我有一个更新的android工作室我收到以下错误但我找不到Gradle文件夹中的gradle 4.1但是当我检查文件 - >项目结构 - > gradle插件是4.

Error:Could not find com.android.tools.build:gradle:4.1.
Searched in the following locations:
file:/C:/Program Files/Android/Android Studio/gradle/m2repository/com/android/tools/build/gradle/4.1/gradle-4.1.pom
file:/C:/Program Files/Android/Android Studio/gradle/m2repository/com/android/tools/build/gradle/4.1/gradle-4.1.jar
https://jcenter.bintray.com/com/android/tools/build/gradle/4.1/gradle-4.1.pom
https://jcenter.bintray.com/com/android/tools/build/gradle/4.1/gradle-4.1.jar
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/4.1/gradle-4.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/4.1/gradle-4.1.jar
Run Code Online (Sandbox Code Playgroud)

我的build.gradle文件就是这个.我把它设置为23因为我需要在5.0.1手机上运行它.

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
    applicationId "com.example.threewire.myapplication"
    minSdkVersion 10
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:23.1.1' …
Run Code Online (Sandbox Code Playgroud)

android gradle

36
推荐指数
4
解决办法
4万
查看次数

如何以及在何处使用Transformations.switchMap?

在Google最近发布的Android Architecture Components库中,我们在Transformations类中有两个静态函数.虽然map功能很直接且易于理解,但我发现很难正确理解该switchMap功能.

可以在此处找到switchMap的官方文档.

有人可以用一个实际的例子解释如何以及在哪里使用switchMap功能?

android android-livedata android-architecture-components

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

房间 - 选择IN状态的查询?

是否可以在INRoom中使用SQLite的条件?

我正在尝试从我的数据库中选择一个项目列表,其中某列的值(在本例中为TEXT列)与一组过滤器值中的任何一个匹配.根据我的知识,这很容易在SQL和SQLite中完成,只需INSELECT语句中添加一个条件(参见此处).但是,我似乎无法使它与Room合作.

我一直收到这个错误:

Error:(70, 25) error: no viable alternative at input 'SELECT * FROM Table WHERE column IN :filterValues'
Run Code Online (Sandbox Code Playgroud)

(@Query调用DAO 注释方法的输入filterValues)

我现在尝试了三种不同的方法:

  1. 将论证作为一个 List<String>
  2. 将论证作为一个 String[]
  3. 最后将参数简单地传递给了String,但格式化为(value_1, value_2, ..., value_n)

特别是最后一个应该可以很容易地工作,因为它将(或者至少应该)直接转换为SELECT * FROM Table WHERE column IN (value_1, value_2, ..., value_n),SELECT如果您只是直接访问数据库,这就是您手动写出的确切方式.

sqlite select android sql-in android-room

36
推荐指数
3
解决办法
2万
查看次数

为什么以及何时将@JvmStatic与伴侣对象一起使用?

我试图理解使用/不使用@JvmStatic与何时使用其中任何一个之间的区别.

所以,使用Kotlin和Java,我可以这样做:

TestKotlin.kt

class TestKotlin {
    companion object {
        val someString = "hello world"
    }
}
Run Code Online (Sandbox Code Playgroud)

然后由Java调用,如下所示:

TestJava.java

public class TestJava {
    String kotlinStaticString = TestKotlin.Companion.getSomeString();
}
Run Code Online (Sandbox Code Playgroud)

但是,有这个选项2:

TestKotlin.kt V2

class TestKotlin {
    companion object {
        @JvmStatic  // <-- notice the @JvmStatic annotation
        val someString = "hello world"
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,从Java调用它,如下所示:

TestJava.java V2

public class TestJava {
    String kotlinStaticString = TestKotlin.getSomeString();
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  • 在行为或内存分配方面,这两种情况有何不同?
  • 是否有偏好使用哪一个?
  • 两者都创建一个伪静态单例对象,就像Java静态一样吗?

谢谢!

java android kotlin kotlin-companion

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

android.view.View $ OnUnhandledKeyEventListener

我是Android Studio的新手,我不知道为什么我的工具栏没有按照https://developer.android.com/training/appbar/setting-up所描述的那样显示 我知道已经有一些像我这样的问题了stackoverflow但它们不适用于我的项目.因此,我非常感谢解决这个问题.截图:

截图

java.lang.ClassNotFoundException: android.view.View$OnUnhandledKeyEventListener
at org.jetbrains.android.uipreview.ModuleClassLoader.load(ModuleClassLoader.java:180)
at com.android.tools.idea.rendering.RenderClassLoader.findClass(RenderClassLoader.java:61)
at org.jetbrains.android.uipreview.ModuleClassLoader.findClass(ModuleClassLoader.java:118)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.jetbrains.android.uipreview.ModuleClassLoader.loadClass(ModuleClassLoader.java:213)
at android.support.v7.widget.ViewUtils.isLayoutRtl(ViewUtils.java:58)
at android.support.v7.widget.Toolbar.onMeasure_Original(Toolbar.java:1578)
at android.support.v7.widget.Toolbar.onMeasure(Toolbar.java)
at android.view.View.measure_Original(View.java:22071)
at android.view.View_Delegate.measure(View_Delegate.java:80)
at android.view.View.measure(View.java:22035)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure_Original(View.java:22071)
at android.view.View_Delegate.measure(View_Delegate.java:80)
at android.view.View.measure(View.java:22035)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure_Original(View.java:22071)
at android.view.View_Delegate.measure(View_Delegate.java:80)
at android.view.View.measure(View.java:22035)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.measureView(RenderSessionImpl.java:590)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:343)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:384)
at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:193)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:544)
at com.android.tools.idea.rendering.RenderTask.lambda$inflate$3(RenderTask.java:678)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimaryDark"> …
Run Code Online (Sandbox Code Playgroud)

unhandled android keyevent android-toolbar

36
推荐指数
4
解决办法
3万
查看次数