Giter Club home page Giter Club logo

wanandroid's Introduction

Kotlin 版 WanAndroid 客户端

Platform Build Status Release Release GitHub license

开源不易,如果喜欢的话希望给个 StarFork ^_^ ,谢谢~~

前言

前段时间学习了 Kotlin 的语法知识,然后就写了这个项目熟悉一下 Kotlin 语言,总体下来,感觉很爽,相比 Java 而言代码行数较少,方法数减少,再加上 lambda 语法让代码更加清晰。

简介

WanAndroid 采用 Kotlin 语言编写,结合 MVP + RxJava + Retrofit + Glide + EventBus 等架构设计的项目,项目代码结构清晰并且有详细注释,如有任何疑问和建议请提 Issues 或联系 qq: 563859095项目会持续迭代维护,努力打造一款优秀的 WanAndroid 客户端

API

玩 Android 开放 API

项目截图

下载体验

  • 点击 下载

  • 扫描下方二维码下载(二维码,每日上限100次,如果达到上限,还是clone源码吧!

主要功能

  • 首页、知识体系、公众号、导航、项目五大模块;
  • 登录注册功能;
  • 搜索功能:热门搜索、搜索历史;
  • 收藏功能:添加收藏、取消收藏;
  • 文章列表快速置顶功能;
  • 侧滑返回功能;
  • 浏览文章、分享文章、用浏览器打开文章;
  • 我的积分、积分排行榜功能;
  • TODO模块:新增待办、更新待办、查看待办、删除待办等功能;
  • 夜间模式功能;
  • 无图模式功能;
  • 首页置顶文章开关;
  • 自动切换夜间模式功能;
  • 自定义切换主题颜色功能;
  • 应用内提示更新 APP
  • 清除缓存功能;
  • 关于模块。

主要开源框架

更新日志

最新更新日志请点击查看

v1.1.8

  • 优化代码;
  • 修复已知问题。

v1.1.7

  • 修复已知问题。

v1.1.6

  • 迁移至androidx。

v1.1.5

  • 修复部分文章打开有广告的问题;
  • 新增夜间模式下打开文章;
  • 修复设置页链接跳转的问题。

v1.1.4

  • 新增广场模块;
  • 新增我的分享、分享文章、删除分享文章功能;
  • 优化知识体系和导航到体系模块;
  • 新增扫码下载;
  • 关于我们移动到设置页面;
  • 集成 Tinker 热更新;
  • 优化代码和界面,修复已知问题。

v1.1.3

  • 修复部分文章作者不显示问题;
  • 增加官方网站。

v1.1.2

  • 新增我的积分功能;
  • 新增积分排行榜功能;
  • 优化登录、注册和更新界面 UI
  • 修复已知 bug 增强体验。

v1.1.1

  • Android 接口升级为 https

v1.1.0

  • 重构项目架构,优化代码;
  • 重构 TODO 功能模块;
  • 修改已知 bug 和部分 UI

v1.0.8

  • 新增公众号模块,阅读公众号文章更方便;
  • 优化部分 UI
  • 修改已知 bug

v1.0.7

  • 增加首页置顶文章;
  • 增加退出登录接口;
  • 增加手动检查更新;
  • 优化代码,修改已知 bug

v1.0.6

  • 增加 Lifecycle 组件使得 PresenterActivity 生命周期绑定;
  • 增加今日头条提供的屏幕适配方案,开源库 AndroidAutoSize
  • 升级 AgentWeb4.0.2 版本,并修改部分 API 改动的问题;
  • 增加网络请求失败后的请求重连操作,具体请查看类 RetryWithDelay
  • 解决转屏时,项目页视图空白的问题;
  • 去掉 Tablayout 切换时的动画,优化体验;
  • 修改其他已知 bug

v1.0.5

  • 增加TODO功能;
  • 增加有无网络的状态提示信息;
  • 增加无网切换到有网的重连操作;
  • 修改已知 bug,如:#6

v1.0.3

  • 集成 bugly 应用内更新;
  • 优化沉浸式状态栏显示效果;
  • 优化登录注册界面;
  • 修改 VerticalTabLayout 的点击 item 滑动的问题;
  • 优化夜间模式和自动切换夜间模式。

v1.0.2

  • 优化细节问题;
  • 修改已知 bug

v1.0.1

  • 增加搜索功能,包含热门搜索和历史搜索;
  • 增加 litepal 数据库;
  • 增加 bugly 收集应用异常信息;
  • 增加 Android-Debug-Database 来查看数据库;
  • 修复已知 bug

v1.0.0

  • 初始化版本,主要功能都已经完成。

Thanks

感谢所有优秀的开源项目 ^_^

Statement

项目中的 API 均来自于 www.wanandroid.com 网站,纯属学习交流使用,不得用于商业用途。

LICENSE

Copyright 2018 iceCola7 

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

wanandroid's People

Contributors

icecola7 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wanandroid's Issues

闪退

更新之后点开文章详情直接闪退了,看看你那能不能用

数据解析问题

作者 想问一下我用这个项目 的网络框架 okhttp打印数据是全的 但是用到实体类 总是显示三个字段这样是有值的,其他的都是null 这是怎么回事尼。期待你的答复 谢谢

启动报错了

I/QarthLog: [PatchStore] createDisableExceptionQarthFile E/QarthLog: [PatchStore] current thread application info is null I/HwApiCacheMangerEx: apicache path=/storage/emulated/0 state=mounted key=com.cxz.wanandroid#10229#256 need clear apicache,because volumes changed,oldCnt=0 newCnt=1 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.cxz.wanandroid, PID: 11702 java.lang.NoSuchMethodError: No direct method <init>(ILjava/lang/String;Ljava/lang/String;Z)V in class Lcom/tencent/tinker/loader/app/TinkerApplication; or its super classes (declaration of 'com.tencent.tinker.loader.app.TinkerApplication' appears in /data/app/com.cxz.wanandroid-YzSx-U7cjmZFnh-SL0u4qA==/base.apk) at com.tencent.bugly.beta.tinker.TinkerPatchReflectApplication.<init>(BUGLY:44) at java.lang.Class.newInstance(Native Method) at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:76) at android.support.v4.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:49) at android.app.Instrumentation.newApplication(Instrumentation.java:1167) at android.app.LoadedApk.makeApplication(LoadedApk.java:1296) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7322) at android.app.ActivityThread.access$2400(ActivityThread.java:308) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2295) at android.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loop(Looper.java:219) at android.app.ActivityThread.main(ActivityThread.java:8349) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055) I/Process: Sending signal. PID: 11702 SIG: 9

发现一个bug

更换主题(绿色)后,当点击夜间模式的情况下,再次点击切换回来,发现最上面的信号显示的地方,主题颜色变成紫色了。

崩溃退出

    使用发现:点击app图标,一进入主界面,迅速切换到“项目”模块下,立马向上滑动,出现崩溃退出现象,多次测试,出现同样的退出现象。

想交流一下这种夜间模式的方法的bug

拉下来你的项目,如果设置成夜间模式,杀死进程后,

再进入,因为保存了状态application会设置此项目是全局夜间模式。

此时点进含有webview的文章内页,然后退出去,在部分android 9 系统(目前我所发现的miui 三星 vivo)中,首页会被刷新。

这是一个很大的问题。希望可以讨论交流。

不知道博主是否将此方案用到正式项目中,希望得到回复和交流

BottomNavigationView文字显示不全

在我没有切换到“知识体系“时显示正常,但是当我切换到“知识体系”后只能显示出“知识体”三个字
屏幕是720x1280的
因为我现在使用的是手机难以上传截图,截图请稍等

更新:wanandroid 域名切换为https啦

为了满足小程序等开发需求,wanandroid 域名切换为https啦,需要尽快更新下 baseurl,目前可能部分http接口会异常,有问题及时反馈我,谢谢!

首先非常感谢大佬的开源 有个启动问题

image
Caused by: org.gradle.internal.event.ListenerNotificationException: Failed to notify project evaluation listener.

Caused by: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.io.File(org.gradle.api.internal.file.DefaultFilePropertyFactory$DefaultDirectoryVar, String)

百度也没找到原因 求解答 谢谢大佬

运行报错

Process: com.cxz.wanandroid, PID: 665
java.lang.NoSuchMethodError: No direct method (ILjava/lang/String;Ljava/lang/String;Z)V in class Lcom/tencent/tinker/loader/app/TinkerApplication; or its super classes (declaration of 'com.tencent.tinker.loader.app.TinkerApplication' appears in /data/app/com.cxz.wanandroid-wkWwEkOekEfI_2O1qkI9rA==/base.apk)
at com.tencent.bugly.beta.tinker.TinkerPatchReflectApplication.(BUGLY:44)
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:76)
at android.support.v4.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:49)
at android.app.Instrumentation.newApplication(Instrumentation.java:1202)
at android.app.LoadedApk.makeApplication(LoadedApk.java:1258)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6793)
at android.app.ActivityThread.access$1500(ActivityThread.java:255)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2073)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:230)
at android.app.ActivityThread.main(ActivityThread.java:7752)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:508)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)

关于MVP中BaseBasePresenter中问题

很感谢作者开源此项目,实属不易。看了下作者写的BasePresenter**,其中有使用lifecycle感知View的生命周期,但是为啥在代码中注释此代码呢?却在Activity#onDestroy中调用detachView(),是因为生命周期感知覆盖不全面吗?还是有其他坑?还请不吝赐教。

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun onDestroy(owner: LifecycleOwner) {
        // detachView()
        owner.lifecycle.removeObserver(this)
    }

还有一点,在RetrofitHelper中,看作者使用lazy创建ApiService实例, 默认情况下,对于 lazy 属性的求值是同步锁的(synchronized), 该值只在一个线程中计算,并且所有线程会看到相同的值。而这里作者在获取getRetrofit()实例时,却synchronized了下,感觉这一步没有必要呀!

按音量键webview直接finish掉了

文章详情按音量键webview直接finish掉了,导致每次看文章,听音乐调节音量时候。很不方便。PS(这次找对地方提issue了#滑稽)

请问

请问下有提供非kotlin语言编写的项目么?还没得学习kotlin。

help

资源文件缺了好多啊啊

拉下来编译提示这个怎么解决...

Gradle Daemon started in 2 s 524 ms

Configure project :app
TinkerSupport Plugin Version: 1.1.4
Requires:
Android Plugin for Gradle, Revision 2.0.0 or higher
Dependencies:
Gradle 2.10 or higher (Current Gradle Version: 5.6.4)

reflectDexArchiveFlag error: ENABLE_DEX_ARCHIVE.
apply plugin: 'com.tencent.tinker.patch'
----------------------tinker build warning ------------------------------------
tinker auto operation:
excluding annotation processor and source template from app packaging. Enable dx jumboMode to reduce package size.
enable dx jumboMode to reduce package size.
disable preDexLibraries to prevent ClassDefNotFoundException when your app is booting.
disable archive dex mode so far for keeping dex apply.

tinker will change your build configs:
we will add TINKER_ID=null in your build output manifest file build/intermediates/manifests/full/*

if minifyEnabled is true
you will find the gen proguard rule file at build/intermediates/tinker_intermediates/tinker_proguard.pro
and we will help you to put it in the proguardFiles.

if multiDexEnabled is true
you will find the gen multiDexKeepProguard file at build/intermediates/tinker_intermediates/tinker_multidexkeep.pro
and we will help you to put it in the MultiDexKeepProguardFile.

if applyResourceMapping file is exist
we will build app apk with resource R.txt file
if resources.arsc has changed, you should use applyResource mode to build the new apk!

----------------------tinker-support build warning ------------------------------------
if you not set autoBackupApkDir we will auto backup the build file to D:\AndroidProject\WanAndroid-master\app/tinker.

if overrideTinkerPatchConfiguration is true
we will override tinker patch configuration��you must use tinker-support's configuration

you will find the gen proguard rule file at build/intermediates/bugly_intermediates/bugly_proguard.pro
and we will help you to put it in the proguardFiles.

if enableProxyApplication is true
we will replace you real application to TINKER_PATCH_APPLICATION

if autoGenerateTinkerId is true
we will auto set base tinkerId as versionName.versionCode, like 1.0.1

------ Tinker Support Override tinkerPatch Configuration ------
tinkerPatch {
tinkerEnable = true
oldApk = D:\AndroidProject\WanAndroid-master\app\build\bakApk/app-1026-22-10-05/WanAndroid-release.apk
ignoreWarning = false
useSign = true
buildConfig {
applyMapping = D:\AndroidProject\WanAndroid-master\app\build\bakApk/app-1026-22-10-05/app-release-mapping.txt
applyResourceMapping = D:\AndroidProject\WanAndroid-master\app\build\bakApk/app-1026-22-10-05/app-release-R.txt
tinkerId = base-1.1.5
keepDexApply = false
isProtectedApp = false
supportHotplugComponent = true
}
dex {
dexMode = jar
pattern = [classes*.dex, assets/secondary-dex-?.jar]
loader = [com.tencent.tinker.loader.]
}
lib {
pattern = [lib/
/.so]
}
res {
pattern = [res/
, r/, assets/, resources.arsc, AndroidManifest.xml]
ignoreChange = [assets/*_meta.txt]
largeModSize = 100
}
packageConfig {
}
sevenZip {
zipArtiface = com.tencent.mm:SevenZip:1.1.10
path =
}
------ End ------
variantName:Debug
outputVariantName:Debug

FAILURE: Build failed with an exception.

  • What went wrong:
    A problem occurred configuring project ':app'.

Failed to notify project evaluation listener.
Could not find matching constructor for: java.io.File(org.gradle.api.internal.file.DefaultFilePropertyFactory$DefaultDirectoryVar, String)
can't find tinkerProcessDebugManifest, you must init tinker plugin first!

  • Try:
    Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Exception is:
    org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':app'.
    at org.gradle.configuration.project.LifecycleProjectEvaluator.wrapException(LifecycleProjectEvaluator.java:80)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:73)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.access$600(LifecycleProjectEvaluator.java:53)
    at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate.run(LifecycleProjectEvaluator.java:199)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject$1.run(LifecycleProjectEvaluator.java:112)
    at org.gradle.internal.Factories$1.create(Factories.java:26)
    at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:189)
    at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:227)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:221)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:187)
    at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:96)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:68)
    at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:693)
    at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:141)
    at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:36)
    at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:64)
    at org.gradle.configuration.DefaultProjectsPreparer.prepareProjects(DefaultProjectsPreparer.java:55)
    at org.gradle.configuration.BuildOperatingFiringProjectsPreparer$ConfigureBuild.run(BuildOperatingFiringProjectsPreparer.java:52)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.configuration.BuildOperatingFiringProjectsPreparer.prepareProjects(BuildOperatingFiringProjectsPreparer.java:40)
    at org.gradle.initialization.DefaultGradleLauncher.prepareProjects(DefaultGradleLauncher.java:198)
    at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:138)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:126)
    at org.gradle.initialization.DefaultGradleLauncher.getConfiguredBuild(DefaultGradleLauncher.java:100)
    at org.gradle.internal.invocation.GradleBuildController$2.execute(GradleBuildController.java:70)
    at org.gradle.internal.invocation.GradleBuildController$2.execute(GradleBuildController.java:67)
    at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:85)
    at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:78)
    at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:189)
    at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
    at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:78)
    at org.gradle.internal.invocation.GradleBuildController.configure(GradleBuildController.java:67)
    at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner.run(ClientProvidedPhasedActionRunner.java:62)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:63)
    at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
    at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:51)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:45)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:50)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47)
    at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:78)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52)
    at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:59)
    at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:36)
    at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68)
    at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38)
    at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37)
    at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26)
    at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
    at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:68)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:27)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    Caused by: org.gradle.internal.event.ListenerNotificationException: Failed to notify project evaluation listener.
    at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:86)
    at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:325)
    at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:235)
    at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:141)
    at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
    at com.sun.proxy.$Proxy38.afterEvaluate(Unknown Source)
    at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:191)
    at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:188)
    at org.gradle.api.internal.project.DefaultProject.stepEvaluationListener(DefaultProject.java:1420)
    at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate.run(LifecycleProjectEvaluator.java:197)
    ... 115 more
    Caused by: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.io.File(org.gradle.api.internal.file.DefaultFilePropertyFactory$DefaultDirectoryVar, String)
    at com.tencent.tinker.build.gradle.TinkerPatchPlugin.setPatchNewApkPath(TinkerPatchPlugin.groovy:360)
    at com.tencent.tinker.build.gradle.TinkerPatchPlugin$_apply_closure1$_closure2$_closure3.doCall(TinkerPatchPlugin.groovy:152)
    at com.tencent.tinker.build.gradle.TinkerPatchPlugin$_apply_closure1$_closure2.doCall(TinkerPatchPlugin.groovy:151)
    at org.gradle.util.ClosureBackedAction.execute(ClosureBackedAction.java:71)
    at org.gradle.util.ConfigureUtil.configureTarget(ConfigureUtil.java:154)
    at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:105)
    at org.gradle.util.ConfigureUtil$WrappedConfigureAction.execute(ConfigureUtil.java:166)
    at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:163)
    at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:198)
    at org.gradle.api.DomainObjectCollection$all.call(Unknown Source)
    at com.tencent.tinker.build.gradle.TinkerPatchPlugin$_apply_closure1.doCall(TinkerPatchPlugin.groovy:132)
    at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingClosure$1$1.run(DefaultListenerBuildOperationDecorator.java:185)
    at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.reapply(DefaultUserCodeApplicationContext.java:60)
    at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingClosure$1.run(DefaultListenerBuildOperationDecorator.java:180)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingClosure.doCall(DefaultListenerBuildOperationDecorator.java:177)
    at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:41)
    at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:25)
    at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
    at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:231)
    at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:150)
    at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
    ... 125 more

  • Get more help at https://help.gradle.org

CONFIGURE FAILED in 16s

mView为什么持有LifecycleOwner?

override fun attachView(mView: V) { mCompositeDisposable = CompositeDisposable() this.mView = mView if (mView is LifecycleOwner) { (mView as LifecycleOwner).lifecycle.addObserver(this) } if (useEventBus()) { EventBus.getDefault().register(this) } }

刚接触lifecycle我很好奇的是,这个地方的mView为什么会是一个LifecycleOwer呢?还请指点一下。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.