当前位置: 首页 > 软件库 > 应用工具 > 博客客户端 >

Acgclub

ACG 聚合类 App
授权协议 Apache 2.0
开发语言 Kotlin Java
所属分类 应用工具、 博客客户端
软件类型 开源软件
地区 国产
投 递 者 厉念
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

宅社 AcgClub 是一款纯粹的 ACG 聚合类 App。作者出于爱好与学习的目的做出了这款 MD 风格的应用,旨意通过涵盖Android 端的一些热门技术框架来打造一个面向市场级别的产品。

    

通过本项目,你可以了解到以下技术:

  • Material Design
  • MVP
  • 组件化
  • Kotlin
  • RxJava2
  • Retrofit
  • Dagger2
  • Realm
  • Glide
  • Arouter
  • Jsoup
  • Gradle 配置
  • 热更新
  • 混淆、多渠道包

项目相关

项目环境

  • Android Studio 4.1.3
  • Gradle 6.5 
  • kotlin 1.4.21 
  • compileVersion 28

项目结构

AcgClub    
    - app                              宿主app
    - common                           基础库
    - common-res                       公用资源
    - component-acgcomic               漫画组件
      - src/main
        - runalone                     组件独立运行时生效
    - component-acgnews                资讯组件
    - component-acgpicture             看图组件
    - component-acgschedule            番剧组件
    - router                           路由配置及相关服务实现
    - third-party-libs                 三方库存放
    - base_component.gradle            组件依赖配置
    - base_component_compiler.gradle   java注解处理配置
    - base_component_kapt.gradle       kotlin注解处理配置
    - config.gradle                    项目信息配置

新增组件

  • 组件名固定前缀为“component-”

  • 组件内build.gradle需进行如下配置:

//必备
 apply from:"../base_component.gradle"
 //使用java
 apply from:"../base_component_compiler.gradle"
 //或kotlin
 apply from:"../base_component_kapt.gradle"
 //如果用到数据库
 apply plugin: 'realm-android'
  • 组件内res文件将以组件真名为前缀进行约束(例如:component-acgnews,一个布局文件名则需要以此打头:acgnews_layout.xml)

  • 组件独立运行时还需要注意提供相关的application,入口activity,AndroidManifest.xml等

项目配置

config.gradle 中进行项目项目的属性配置,例如:包名、版本号、编译版本...

其中:

//在该属性中填写需要合并到主程序运行的组件,没有填写的组件将独立运行
merge = [
            "acgnews",
            "acgschedule"
            //"acgcomic"
    ]

merge 属性修改完毕后,需要重新构建项目

其他

  • 项目中提示缺失DaggerXXX时,通过完成编译将有Dagger2自动生成
  • 在本地的 local.properties 按自己所需进行一些三方库的key、签名的配置,不需要的可以自行去掉
#阿里云用户反馈
fbAppKey=""
fbAppSecret=""
#友盟
umengAppKey=""
#bugly
buglyAppId=""

#签名信息
storeFile=
storePassword=
keyAlias=
keyPassword=

#友盟分享key
SINA_WEIBO_KEY=""
SINA_WEIBO_SECRET=""
QQ_ZONE_ID=""
QQ_ZONE_KEY=""
WEIXIN_ID=""
WEIXIN_KEY=""
  • 为了确保 bugly 热更新能生效,请每次打出正式包的时候,确认 app 目录下 tinker-support.gradle 文件中的 tinkerId 的唯一性
 相关资料
  • 我们在C类中有以下方法: A是另一个类。在A中,我们有一个声明为类A1类型的变量(我认为这使得A成为一个聚合类)。我已经将以下对象定义为模拟对象: 而且 如果模拟A1对象并在when/verify中使用它的语法是正确的,请您提供帮助? 另一个问题是,如果没有必要为a1创建mock,应该使用哪种语法?例如,下面的可以吗? 谢谢

  • Django数据库抽象API描述了使用Django查询来增删查改单个对象的方法。然而,你有时候会想要获取从一组对象导出的值或者是聚合一组对象。这份指南描述了通过Django查询来生成和返回聚合值的方法。 整篇指南我们都将引用以下模型。这些模型用来记录多个网上书店的库存。 from django.db import models class Author(models.Model): na

  • 请考虑以下情况: 我如何在类图上表示< code>A和< code>B之间的关系?如果< code>B只保存一个< code>A(而不是一个数组),我会使用组合/聚合,但是在这种情况下,我不确定应该做什么。非常感谢你的帮助!

  • 假设我们有两个名为Point和Line的类。Line类有两个构造函数。这是Point类的代码。 这是Line类的代码。 如您所见,Line类有两个构造函数。第一个构造函数是组合的例子,而第二个构造函数是集合的例子。现在,关于这个案子我们能说些什么?一个类可以同时有聚合和合成吗?谢谢你的回答。

  • 问题内容: 如何为特定类型执行ElasticSearch聚合?我意识到您可以在请求网址中指定索引和/或类型,但是我想对两种不同的类型进行汇总。 谢谢! 问题答案: 您可以按类型过滤聚合,然后使用子聚合。例如:

  • 我正在尝试设置一个搜索查询,该查询应通过多级嵌套字段复合聚合集合,并从该集合中提供一些子聚合指标。我能够按预期使用其存储桶获取复合聚合,但所有存储桶的子聚合指标都带有。我不确定我是否未能正确指出子聚合应考虑哪些字段,或者它是否应放置在查询的不同部分中。 我的收藏看起来类似于以下内容: 贝娄,你可以找到我已经尝试了。尽管所有文档都有一个设置的点击值,但所有存储桶都带有点击总数。 到目前为止,我的回应

  • 在聚合中,两个实体之间的关系被视为单个实体。 在聚合中,与其对应实体的关系被聚合到更高级别的实体中。 例如:中心(Center)实体提供课程(Course)实体充当关系中的单个实体,该实体与另一个实体访问者处于关系中。 在现实世界中,如果访问者访问教练中心,那么他将永远不会询问有关课程或只是关于中心,而是他会询问有关两者的询问。

  • 框架集合由搜索查询选择的所有数据。框架中包含许多构建块,有助于构建复杂的数据描述或摘要。聚合的基本结构如下所示 - 有以下不同类型的聚合,每个都有自己的目的 - 指标聚合 这些聚合有助于从聚合文档的字段值计算矩阵,并且某些值可以从脚本生成。 数字矩阵或者是平均聚合的单值,或者是像一样的多值。 平均聚合 此聚合用于获取聚合文档中存在的任何数字字段的平均值。 例如, 请求正文 响应 如果该值不存在于一