首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android笔记:Android 组件化方案探索与思考

本项目github地址 先来一张效果图,建议读者clone项目后跟着项目看这篇文章,有任何不明白的地方可留言或者联系我,我看到后会立刻回复你。 ?...组件化优势 组件化就是将通用模块独立出来,统一管理,以提高复用,将页面拆分为粒度更小的组件,组件内部除了包含UI实现,还包含数据层和逻辑层。 每个工程都可以独立编译、加快编译速度,独立打包。...library以及工具类 组件通信:组件化之后,Module之间是相互隔离的,如何进行UI跳转以及方法调用 入口参数:我们知道组件之间是有联系的,所以在单独调试的时候如何拿到其它的Module传递过来的参数...minSdkVersion = 16 targetSdkVersion = 26 compileSdkVersion = 26 buildToolsVersion = '...isModuleRun状态不同,加载application和AndroidManifest都不一样,以此来区分是独立的APK还是lib, 实现方式如下 在build.grade里面配置 if (isModuleRun.toBoolean

86010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SVG,Vector,gradle

    ,但是为了保证老APK的行为和以前兼容,只要APK的targetSdkVersion不变,那么即使这个APK安装在新的Android系统上,那么行为还是保持老的系统上的行为。...系统在调用某个api或者模块的时候,会先检查调用的APK的targetSdkVersion,来决定执行什么行为。...minSdkVersion和targetSdkVersion最终会被包含进入最终的APK文件中,如果你查看生成的AndroidManifest.xml,那么会发现: android:...compile 'com.aaa.xxx:core:1.0.1@aar' 6.6 将库导出为aar 首先,你的项目必须是一个库项目,之后在build.gradle中进行配置: apply plugin...中声明flat仓库: repositories{ flatDir{ dirs '以build.gradle为根目录的相对路径' } } 之后,在dependencies结点下依赖该

    7310

    Android-support-v4 v7 v8 v13 v17,Android SDK目录结构.打个不恰当比方:JNI 需要自己买菜、洗菜、炒菜、煮饭,很麻烦;NDK就是宅急送,一个电话。

    aapt即Android Asset Packaging Tool , 在SDK的build-tools目录下. 该工具可以查看, 创建, 更新ZIP格式的文档附件(zip, jar, apk)....Dexdump 即Android Emulator中可以找到一个名为dexdump的程序,通过dexdump可以查看出apk文件中的dex执行情况,粗略分析出原始java代码是什 么样的和Dot Net...②在ecplise的project.properties中可以设置sdk.buildtools=20.0.0。也可以不设置,不设置的话就是指定最新版本。...minSdkVersion 如果 compileSdkVersion 设置为可用的最新 API,那么 minSdkVersion 则是应用可以运行的最低要求。...targetSdkVersion 是 Android 提供向前兼容的主要依据,在应用的 targetSdkVersion 没有更新之前系统不会应用最新的行为变化。

    6310

    AndroidStudio3.0多渠道打包:我用一行命令打出N个包

    关于作者: 康白 csdn: http://blog.csdn.net/k_bb_666 前言: 做Android开发的绕不开多渠道这件事,因为Android应用市场大大小小有几百个...多渠道和统计时息息相关的,因为我们做多渠道打包的目的就是要统计,友盟统计是大家日常开发中常用的渠道统计工具,使用相当普遍,接下来我讲到的打包方法就是基于友盟统计实施的。...中进行设置,之后gradle编译的时候会动态的替换掉这个占位符。..." /> 二、在app的build.gradle的android{}中添加如下内容: android { flavorDimensions "default" productFlavors...你需要打什么渠道的包,就在这里按友盟的要求用渠道名给UMENGCHANNELVALUE赋值。上面这个配置的作用就是,为每个渠道包产生不同的 UMENGCHANNELVALUE 的值。

    38110

    实现Android APK瘦身99.99%

    看上去首当其冲的目标是启动图标文件,因为 APK 中共包含了 15 个图像文件,并且在mipmap-anydpi-v26下还有两个 XML 文件。...未签名且未对齐的 APK 大小为 1902 字节,这意味着签名和对齐过程增加了约 1 Kb。 文件大小差异(优化为 2608 字节,削减 21%) 很奇怪!...压缩破解(Compression Hack)(优化为 2599 个字节,削减 0.5%) 让我们将剩余的字符串都更改为‘c’,更新版本为 26,然后生成一个签名的 APK。...下面,我们尝试通过设置 targetSdkVersion 为1并更新文件大小头部为659,去删除一个字节。不幸的是,Android 系统拒绝了这个非法的 APK,因此看上去这里另有玄机。...我想我听到了负责维护BinaryXMLParser.java的 Android Framework 工程师对着枕头在大声尖叫。 为最大化收益,我们将使用空字节(Null)替换这些虚字符。

    1.9K30

    AS中的minSdkVersion、compileSdkVersion、targetSdkVersion、buildTools

    当你修改了 compileSdkVersion 的时候,可能会出现新的编译警告、编译错误,但新的 compileSdkVersion 不会被包含到 APK 中:它纯粹只是在编译的时候使用。...03 — minSdkVersion 如果 compileSdkVersion 设置为可用的最新 API,那么 minSdkVersion 则是应用可以运行的最低要求。...targetSdkVersion 是 Android 提供向前兼容的主要依据,在应用的 targetSdkVersion 没有更新之前系统不会应用最新的行为变化。...由于某些行为的变化对用户是非常明显的(弃用的 menu 按钮,运行时权限等),所以将 target 更新为最新的 SDK 是所有应用都应该优先处理的事情。...来覆盖最大的人群,用最新的 SDK 设置 target 和 compile 来获得最好的外观和行为。

    89320

    【Android 组件化】使用 ARoute 实现组件化 ( 完整组件化项目框架 )

    ; 创建项目 , 项目中有 3 个 Module , 1 个主模块 app , 2 个依赖库 module1 和 module2 ; 在 app , module1 , module2...Module 中的版本号 , 如编译版本号 , 最小版本号 , 目标版本号 ; applicationId 用于保存各个模块的包名 , 尤其是 module 依赖库的包名 , 组件化的状态下 , 该..., 并且在模块化模式中 , 不使用该文件 ; 1、创建组件模式下使用的类和清单文件 在 module1 下创建 组件模式 时使用的 Application 类和清单文件 ; Application..., 当 isModuleMode 设置为 true 时 , 当前是集成模式 , module 模块作为 app 模块的依赖库进行编译 , 因此需要加载 apply plugin: 'com.android.library...' 插件 ; 当 isModuleMode 设置为 false 时 , 是 组件模式 , 每个 module 都是可以独立运行的应用 , 需要加载 apply plugin: 'com.android.application

    2.5K20

    Android工程师,不理解模块化、组件化、插件化的区别怎么行?

    在调试时,我只关心我负责的模块,我希望我的模块是一个单独的app,因为这样更小,业务更专一,相对来讲修改与调试就会越省时省心,编译就会越快。...3、 插件化 又有人问了:插件化和组件化又有什么区别呢? 插件化严格意义来讲,其实也算是模块化的观念。将一个完整的工程,按业务划分为不同的插件,都是分治法的一种体现。化整为零,相互配合。...组件化能做的只是, 朋友圈已经有了,我想单独调试,维护,和别人不耦合。但是和整个项目还是有关联的。...android = [ compileSdkVersion: 26 ] applicationId = [ app...这里说下两个概念: 占位符 ${supportLibrary} 占据一个位置,然后用{}里面的变量补充,达到一致配置的目的 android = [ compileSdkVersion: 26 ] 以上相当于定义了一个

    1.5K60

    【Android Gradle 插件】ProductFlavor 配置 ( applicationId 配置 | SdkVersion 相关配置 | version 应用版本配置 )

    文章目录 一、ProductFlavor 配置 1、applicationId 配置 2、minSdkVersion 配置 3、targetSdkVersion 配置 4、versionCode 和..."1.0" } } 1、applicationId 配置 在 build.gradle 的 android#defaultConfig#applicationId 下设置的包名 , android... 清单文件中的 package 包名 , 只是在该 AndroidManifest.xml 中设置的一些 android:name 配置中 , 用于替换 “.”...applicationId 设置的才是应用的包名 , 清单文件中设置的不是应用包名标识 ; ProductFlavor:applicationId 参考文档 : https://google.github.io...3、targetSdkVersion 配置 targetSdkVersion 配置 : 设置编译目标 SDK 版本 ; 参考文档 : https://google.github.io/android-gradle-dsl

    33530

    【原创】Apktools反编译APK,查看apk信息,常用于安装apk失败原因分析。

    反编译介绍 背景:在adb install安装apk时我们通常出现各种各样的无法安装的问题。...直接将Apk的后缀改成.zip不是也可以直接查看需要的内容吗?...答案:更改apk的后缀.apk为.zip时打开zip中的文件时你会发现是乱码,所以我们需要使用工具进行反编译 需要环境:Window+jdk8 实战教程 测试apk:小米运动 apktool工具下载地址...工具中会生成一个文件夹,打开文件夹中的“AndroidManifest文件” AndroidManifest名词详解: compileSdkVersion:SDK编译版本.编译apk的版本,sdk版本和对应手机...minSdkVersion:最小的SDK版本.运行该APK的安卓SDK最低版本要求 targetSdkVersion:向上兼容版本.APK的运行的最高版本 补充内容 sdk对应android版本:

    2K10

    Groovy高级用法

    Project Api使用 命令使用 在Android studio 命令行中输入./gradlew clean 进行工程的清理 输入./gradlew build 进行task任务的构建 输入..../gradlew projects 列表展示当前根project与它的子project Gradle 生命周期: 在初始化阶段完成所有的配置操作 初始化阶段后就是配置阶段, 再之后就是执行阶段,也就执行...": 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.0'       ]   }   然后在project的build.gradle...value类型属性,无法定义闭包 里面定义isLoadApp = true,在setting.gradle进行配置是否引入app project   //判断是否设置isLoadApp属性,设置了为false...fileTreeElement->           println "the file name is $fileTreeElement.name"           //在将当前文件下的文件拷贝到根工程

    90520

    【错误记录】Kotlin 编译报错 ( Class ‘Xxx‘ is not abstract and does not implement abstract member )

    文章目录 一、报错信息 二、解决方案 一、报错信息 ---- Google Play 上架要求 Android 的编译版本 和 目标版本都要高于 30 才可以上传 ; 将 Android 的编译版本...和 目标版本 都升级为 30 之后 , Kotlin 的编译检查变得更严格 , 之前不规范的代码需要逐个修改 ; 将编译版本 compileSdkVersion 和 目标版本 targetSdkVersion...在 编译版本 compileSdkVersion 和 目标版本 targetSdkVersion 都为 28 时 , 编译不报上述错误 ; 改了下 Android 编译版本号 , 报了 286..., format: Int, width: Int, height: Int) { 可以看到第一个参数是可空参数 , 这个问号总不会是我打上去的吧 ; 这 Kotlin 相关的 前后冲突的操作 , Android...官方没少干这事 ; 解决方案 : 在 Kotlin 中 , 将所有的重写的函数的可空参数 , 都改为非空参数 , 即删除参数后面的问号 “?”

    2.2K20

    Gradle 之 Task 使用

    Project Api使用 命令使用 在Android studio 命令行中输入./gradlew clean 进行工程的清理 输入./gradlew build 进行task任务的构建 输入..../gradlew projects 列表展示当前根project与它的子project Gradle 生命周期: 在初始化阶段完成所有的配置操作 初始化阶段后就是配置阶段, 再之后就是执行阶段,也就执行...": 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.0'       ]   }   然后在project的build.gradle...value类型属性,无法定义闭包 里面定义isLoadApp = true,在setting.gradle进行配置是否引入app project   //判断是否设置isLoadApp属性,设置了为false...fileTreeElement->           println "the file name is $fileTreeElement.name"           //在将当前文件下的文件拷贝到根工程

    91210

    【错误记录】Kotlin 编译报错 ( Type mismatch: inferred type is String? but String was expected )

    文章目录 一、报错信息 二、解决方案 一、报错信息 ---- Google Play 上架要求 Android 的编译版本 和 目标版本都要高于 30 才可以上传 ; 将 Android 的编译版本...和 目标版本 都升级为 30 之后 , Kotlin 的编译检查变得更严格 , 之前不规范的代码需要逐个修改 ; 将编译版本 compileSdkVersion 和 目标版本 targetSdkVersion...but String was expected 在 编译版本 compileSdkVersion 和 目标版本 targetSdkVersion 都为 28 时 , 编译不报上述错误 ; 改了下...Android 编译版本号 , 报了 286 个错误 , 今天逐个解决上述编译错误 ; 二、解决方案 ---- 错误分析 : 上述问题是在方法中传入一个参数 , 导致上述编译报错 ; 方法的参数只接受非空类型..., 不能接受可空参数 ; 传入的数据没有设置具体的数据类型 , 被自动推断为 String!

    2.6K20

    【错误记录】Kotlin 编译报错 ( Smart cast to ‘Xxx‘ is impossible, because ‘xxx‘ is a mutable property ... )

    文章目录 一、报错信息 二、解决方案 一、报错信息 ---- Google Play 上架要求 Android 的编译版本 和 目标版本都要高于 30 才可以上传 ; 将 Android 的编译版本...和 目标版本 都升级为 30 之后 , Kotlin 的编译检查变得更严格 , 之前不规范的代码需要逐个修改 ; 将编译版本 compileSdkVersion 和 目标版本 targetSdkVersion...由 28 修改为 30 ; android { compileSdkVersion 30 buildToolsVersion "29.0.2" defaultConfig {...编译版本 compileSdkVersion 和 目标版本 targetSdkVersion 都为 28 时 , 编译不报上述错误 ; 改了下 Android 编译版本号 , 报了 286 个错误...) 解决方案 : Canvas 的绘制位图的方法是 Android 系统方法 , 方法无法修改 , 只能修改参数 ; 在传入的参数后 , 添加 !!

    2.5K20
    领券