小编j2e*_*nue的帖子

android studio error:默认接口方法仅支持从Android N开始(--min-api 24)

我升级到Android工作室3.1,我得到以下错误:

    Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner)
Message{kind=ERROR, text=Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner), sources=[Unknown source file], tool name=Optional.of(D8)}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是我的gradle配置:

      compileSdkVersion 27
//buildToolsVersion '27.0.3'
defaultConfig {
    minSdkVersion 16
    targetSdkVersion 27
     multiDexEnabled true
     //...
   }
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,我的目标27已经领先于它抱怨的24个?我该怎么做才能解决这个问题?如果我改为1.8 java不会让我失去很多客户?为什么我在升级android studio之前没有收到此错误.

我不知道这是关于我最近投入的LifecycleObserver类,它是在kotlin中,现在我将其更改为java但在清理项目后仍然得到相同的错误:

public class LifeCycleAwareObserver implements LifecycleObserver {

@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void  onAppBackgrounded() {
    AnalyticsUtils.trackStartSession(true);
}

@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onAppForegrounded() {
    AnalyticsUtils.trackStartSession(false);
}
Run Code Online (Sandbox Code Playgroud)

}

如何追踪错误的来源,以便我可以修复它?

这是我的版本依赖项:

project.ext {


        firebase_version …
Run Code Online (Sandbox Code Playgroud)

android java-8 kotlin

193
推荐指数
7
解决办法
6万
查看次数

删除git子模块的当前方法是什么?

对于Mac上的git版本1.9.3(Apple Git-50)如何删除git子模块?我正在阅读很多过时的信息,许多开发人员告诉我他们不会工作.目前的方式是什么?会git deinit pathToSubModule 做的伎俩?

我认为可行的步骤在这里,但评论说他们不会.

让我解释一下我目前的情况以及我需要完成的工作.我已经安装了快速存储库并将其添加到我的项目的子模块中.此代码已经签入,其他人正在使用它.我现在需要做的是分叉相同的Quick存储库并将其托管在我公司拥有的更安全的github上(所以完全是其他私有github).在分叉之后我想将该fork添加为gitSubmodule并让它替换我之前安装的当前Quick子模块.

更新:我已经读过以下是关于最新git版本的正确方法请确认一下?

To remove a submodule added using:

git submodule add blah@blah.com:repos/blah.git lib/blah
Run:

git rm lib/blah
That's it.

For old versions of git (circa ~1.8.5) use:

git submodule deinit lib/blah
git rm lib/blah
git config -f .gitmodules --remove-section submodule.lib/blah
Run Code Online (Sandbox Code Playgroud)

git github git-submodules

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

机器人中的Moshi vs Gson

我决定是否使用方形或Gson的Moshi来序列化和反序列化模型数据.

我总是不喜欢Gson的一件事是我认为它使用的反射在Android上可能很慢?莫希也使用反射吗?

moshi vs Gson的优点和缺点是什么?

我觉得它们很相似.以此语句为例,创建一个typeAdapter:

class CardAdapter {
  @ToJson String toJson(Card card) {
    return card.rank + card.suit.name().substring(0, 1);
  }

  @FromJson Card fromJson(String card) {
    if (card.length() != 2) throw new JsonDataException("Unknown card: " + card);

    char rank = card.charAt(0);
    switch (card.charAt(1)) {
      case 'C': return new Card(rank, Suit.CLUBS);
      case 'D': return new Card(rank, Suit.DIAMONDS);
      case 'H': return new Card(rank, Suit.HEARTS);
      case 'S': return new Card(rank, Suit.SPADES);
      default: throw new JsonDataException("unknown suit: " + card);
    } …
Run Code Online (Sandbox Code Playgroud)

android gson deserialization moshi

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

是否可以将公共GitHub仓库分叉到企业存储库中?

存在用于快速框架公共回购这里.我希望能够将它分成私有企业GitHub存储库.分叉将允许所有分支保留.

另一种方法是克隆repo并将只有一个分支推送到企业,但后来我失去了没有源/源的所有分支.

更新:我最终将所有分支推入企业git.如果你只是做一个git push yourRemoteName myNewBranch那么它会将代码推送到企业git上的那个分支,同时在企业GitHub中创建该分支.

git github git-branch

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

Dagger 2 - @Singleton注释类的目的是什么

从匕首2 文档我注意到你可以有一个带@Singleton注释的类.标记类的目的是什么,@Singleton因为我试图在我的代码中执行此操作,但不生成单例对象.我不清楚用这个注释标记我的类的用途.

请从文档中关注以下声明:

注入类上的@Singleton注释也可用作文档.它提醒潜在的维护者,这个类可能被多个线程共享.*

@Singleton
class CoffeeMaker {
  ...
}
Run Code Online (Sandbox Code Playgroud)

更新:在查看froger_mcs答案后,我看到在Dagger 2中你可以通过模块或构造函数注入提供注射.因此,可以注入以下类,尽管不在模块中,

@Singleton
public class MyClass {

    @Inject
    public MyClass() {

    }
}
Run Code Online (Sandbox Code Playgroud)

在这个版本中,构造函数是为我们注入的,在Android活动中,您只需执行以下操作即可获得:

@Inject
MyClass myClass;
//then in onCreate actually inject(this) from your graph of course.
Run Code Online (Sandbox Code Playgroud)

dependency-injection dagger dagger-2

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

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

android studio 3.1警告:规则`-keep public class*extends java.lang.annotation.Annotation {

我最近升级了android studio但我无法找到android studio 3.1中报告的以下问题的来源:

Warning: The rule `-keep public class *extends java.lang.annotation.Annotation {
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

这个警告似乎可能被切断,而且缺少信息.但它看起来像一个proguard问题,虽然我在构建调试变量时收到此警告.我检查了我的proguard文件,我没有完全匹配的行.我搜索了整个项目.关于根本原因的任何想法?

android proguard

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

Android gradle中的apt依赖范围 - 它用于什么?

我有时会看到android gradle文件中的apt依赖范围是什么?

一个例子看起来像这样?

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
android {
    compileSdkVersion 20
    buildToolsVersion '20.0.0'
    defaultConfig {
        applicationId "org.ligboy.test.card.module1"
        minSdkVersion 14
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

final DAGGER_VERSION = '2.0.2'

dependencies {  
    compile "com.google.dagger:dagger:${DAGGER_VERSION}"
    apt "com.google.dagger:dagger-compiler:${DAGGER_VERSION}"//what is this scope 
    provided 'org.glassfish:javax.annotation:10.0-b28'
}
Run Code Online (Sandbox Code Playgroud)

在顶级build.gradle文件中,它具有以下全局依赖关系:

buildscript { 
dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
    }
}
Run Code Online (Sandbox Code Playgroud)

注意在依赖关系部分有一个apt范围?我只知道编译,包和提供的范围.编译包括编译时和程序包中的依赖项,前提是说只在编译时包含库并在打包时丢弃它,因此它不包含在最终构建中.和Package是相反的,它包括包中的依赖,而不是在编译时.但是什么是apt依赖范围,我们显然需要com.neenbedankt.android-apt才能工作,所以我知道它基于android.

更新:为什么我不能使用提供的依赖范围而不是apt范围?他们有什么不同?

我为那些需要更多信息的人创建了一个关于匕首依赖范围的教程.

android gradle android-gradle-plugin

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

Android - getTargetFragment和setTargetFragment - 它们用于什么

我试着搜索,但我仍然有点失落.我通常通过Activityvia接口或a 来片段化片段通信BroadcastReceiver.

无论如何,我的问题是什么用getTargetFragment?有人可以提供用例或只是一个简单的例子,以便我能理解它的用法吗?

android communication android-fragments

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

Crashlytics错误 - 此应用程序依赖于Crashlytics.请注册访问

我在gradle中有两个构建版本但由于某种原因,每当我将以下标志更改为false时,我都会收到标题错误消息:

ext.enableCrashlytics = false
Run Code Online (Sandbox Code Playgroud)

错误本身完成如下:

Process: com.mobile.myapp.staging, PID: 5439
java.lang.RuntimeException: Unable to create application com.mobile.myapp.UI.myappApplication: io.fabric.sdk.android.services.concurrency.UnmetDependencyException: This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
install an Android build tool and ask a team member to invite you to this app's organization.
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4710)
at android.app.ActivityThread.-wrap1(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: io.fabric.sdk.android.services.concurrency.UnmetDependencyException: This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
install …
Run Code Online (Sandbox Code Playgroud)

java android crashlytics

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