当前位置: 首页 > news >正文

自己建一个网站郑州英语网站建设

自己建一个网站,郑州英语网站建设,开发网站价格,自己做网站服务器的备案方法Android 开发过程中#xff0c;我们不可避免地需要引入其他人的工作成果。减少重复“造轮子”的时间#xff0c;投入到更有意义的核心任务当中。Android 库模块在结构上与 Android 应用模块相同。提供构建应用所需的一切内容#xff0c;包括源代码#xff08;src#xff0… Android 开发过程中我们不可避免地需要引入其他人的工作成果。减少重复“造轮子”的时间投入到更有意义的核心任务当中。 Android 库模块在结构上与 Android 应用模块相同。提供构建应用所需的一切内容包括源代码src、资源文件res和 Android 清单文件AndroidManifest.xml。 Android Studio IDE 提供选项创建库模块 在项目中创建一个新的库模块New Module将应用模块转换为库模块因两者结构基本相同如果现有的应用模块包含希望重用的所有代码可以通过修改 build.gradle文件: // apply plugin: com.android.application apply plugin: com.android.library Android 库模块编译产物为 AAR需要作为其他应用模块依赖项使用。Android 应用模块编译产物为 APK设备上可以直接运行。Android AAR 类似 Java JAR除了类文件还可以包含 Android 资源和一个清单配置文件AndroidManifest.xml。 导入本地外部模块 导入本地的外部模块e.g. Project B b module到当前主项目中e.g. Project A。Project B b module 通常为库模块我们需要在另一个 Project A 应用模块中使用它。 Android Studio IDE 提供选项以依赖项形式来添加库 添加已编译的 AAR或 JAR文件Import .JAR/.AAR Package将库模块导入到您的项目中Import Module两者区别如下 库模块导入方式将会复制代码到其他项目 Project A 目录下出现 Project B b module 的拷贝库模块导入之后允许编辑库代码但是修改只对当前项目生效Project A 目录下修改 b module 不会影响到 Project B b module在现实开发过程中我们希望维护一个统一版本的库模块这样一来库模块的更新就会同步给所有依赖于它的项目 Project A、Project C、Project D 都依赖于 Project B b module库模块 b 的修改会同步到各个项目。 库模块导入方式显然无法完成任务因为其是通过拷贝方式导入。添加已编译的 AAR或 JAR文件可以完成任务但是依然需要人工切换项目点选操作。解决方案配置 gradle 通过本地相对路径指定库模块文件夹实现本地外部模块导入。 打开主项目 settings.gradle 文件导入库 include :my-library-module project(:my-library-module).projectDir new File(settingsDir, ../my-library-module) 打开主项目应用模块的 build.gradle 文件并向 dependencies 块中添加依赖 dependencies {compile project(:my-library-module) } 库模块开发注意事项 将库模块引用添加至您的 Android 应用模块后库模块会根据优先级的顺序与应用模块进行合并。 资源合并冲突 当库模块与应用模块均定义了相同资源 ID默认使用应用模块的资源e.g. string/app_name多个 AAR 库之间发生资源 ID 冲突根据依赖项列表顺序优先使用 dependencies 块顶部模块的资源避免常用资源 ID 冲突的有效办法是在各个模块中使用具有唯一性的前缀命名规范。 AndroidManifest 合并冲突 考虑到兼容性问题应用模块的 minSdkVersion 必须大于或等于库定义的版本。库模块中如若使用到仅高版本 SDK 支持的 API将会导致应用模块编译失败。 Android 在切换到 Gradle 作为构建系统之前通过 Manifest 设置 minSdkVersion之后其值会被 build.gradle 文件中的值覆盖。 Android 应用的 APK 文件中只能包含一个 AndroidManifest.xml不过 Android Studio 项目可以包含多个该文件来自主应用模块及各个库模块。因此在构建应用时Gradle 构建会将所有清单文件AndroidManifest.xml合并。清单文件按照优先级从低到高合并遵循特定规则合并各个清单文件中的所有 XML 元素 。 清单文件优先级由高到低的顺序 清单文件构建变体应用模块的主清单文件所包括库中的清单文件多个库存在时则其清单优先级与依赖顺序即 dependencies 块中的顺序匹配。 Manifest merger failed 示例 android:theme 在多个 AndroidManifest.xml 被定义且值不同造成合并冲突。 Project A 主项目 AndroidManifest.xml applicationandroid:allowBackuptrueandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:roundIconmipmap/ic_launcher_roundandroid:supportsRtltrueandroid:themestyle/AppTheme style nameAppTheme parentTheme.AppCompat.Light.NoActionBar Project B b Library Module AndroidManifest.xml applicationandroid:themeTheme.AppCompat.Light.DarkActionBar 遇到 Manifest 冲突参考 Gradle Console 给出的错误日志和提示解决冲突。 例如使用 tools:replace 方式避免属性冲突借助 tools 域名空间xmlns:toolshttp://schemas.android.com/tools设置 Manifest 的合并优先级。明确表示合并时移除低优先级 library module 中的相关属性使用高优先级 application module 中定义的对应属性内容。 Project A 主项目 AndroidManifest.xml applicationandroid:allowBackuptrueandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:roundIconmipmap/ic_launcher_roundandroid:supportsRtltrueandroid:themestyle/AppThemetools:replaceandroid:theme 模块依赖分析 考虑到多重嵌套依赖问题Gradle 类似 Maven 支持传递依赖即库本身依赖于其他库由此需要解决依赖之间的版本问题。 复杂的依赖关系很可能导致重复引入包例如support-v4、support-v7 包从而发生冲突。 多个模块之间存在相同依赖并且发生冲突可以通过 exclude 语法过滤相同依赖 // helloworld build.gradle ... compile (com.example.helloworld:my-library-module:1.0.0) {exclude group: com.android.support, module: support-v4exclude group: com.android.support, module: support-v7 } 上述方法是在主项目引入其他库模块时进行过滤依赖作为库模块开发者我们也应该考虑到其他用户的使用情况。 provided 语法在创建 Android 库模块时非常有用将依赖项添加到编译过程中但不会添加到编译输出中。这样一来减少最终 APK、AAR 产物大小同时避免添加不必要依赖项。 注意需要告知用户此依赖项存在由其如何决定引入依赖。 // my-library-module build.gradle ... ext.supportLibVersion 26.1.0dependencies {implementation fileTree(dir: libs, include: [*.jar])provided com.android.support:appcompat-v7:${supportLibVersion} } Project A 依赖 a、b、c module同时 a、b module 又依赖于 d module且 a、b 各自依赖的 d module 版本version不一致不同 version 的 d module 中 API 接口如若发生改变Project A Build/Sync 将会失败。 例如 version 1.0 中的方法 method1在 version 2.0 被移除将会遇到 java.lang.NoSuchMethodError。 建议尽可能保持依赖项 d module version 一致或者使用不同 version 但是差异不大起码做到 API 能够通用。 通过 ./gradlew dependencies 命令可以查看依赖关系附加参数可以查看指定类型、模块依赖关系 ./gradlew my-library-module:dependencies --configuration archives archives - Configuration for archive artifacts. --- com.android.support:recyclerview-v7:26.1.0 | --- com.android.support:support-annotations:26.1.0 | --- com.android.support:support-compat:26.1.0 | | --- com.android.support:support-annotations:26.1.0 | | \--- android.arch.lifecycle:runtime:1.0.0 | | --- android.arch.lifecycle:common:1.0.0 | | \--- android.arch.core:common:1.0.0 | \--- com.android.support:support-core-ui:26.1.0 | --- com.android.support:support-annotations:26.1.0 | \--- com.android.support:support-compat:26.1.0 (*) 另外 Android 项目可以使用 ./gradlew androidDependencies。 另外考虑到构建问题库模块使用的 gradle 插件与应用模块尽量保持一致。 Android Gradle Plugin 版本不一致可能会影响到依赖项配置语法 New configurationDeprecated configurationimplementationcompileapicompilecompileOnlyprovidedruntimeOnlyapk引用 创建 Android 库Add build dependencies合并多个清单文件
http://www.yutouwan.com/news/241967/

相关文章:

  • 石家庄外贸网站推广深圳建设网站制作
  • 网站建设与开发定制广告公司有哪些
  • 怎么做网站解析酒泉网站建设与制作
  • 网站建设服务费做什么分录网站设计高端
  • 手机网站适合分开做烟台网站建设设计公司
  • 网站做好后怎么做seo湖南网络公司关于我们
  • 国家重点项目建设部网站公司官网登录入口
  • 湛江专业网站制作wordpress多网店主题
  • 网站挂黑链工具网络广告策划方案怎么做
  • 网站空间指的是什么意思子目录创建网站
  • 行业网站运营计划做网站费用
  • 企业网站建设排名口碑网站开发谢辞
  • 建站服务昆明网站开发
  • 虞城网站建设备案个人网站名称推荐
  • 中科院网站做的好的院所销售管理系统实验报告
  • 淮安网站设计公司中国设计品牌网
  • 企业网站的基本内容有哪些青县网站建设价格
  • 怎么做网站从0做到权重7做爰网站
  • 做网站设计的有些什么职位桂平网络推广
  • 网络公司企业网站模板扬中做网站的公司
  • 建设会计协会网站湖北省建设厅网站如何申诉
  • 设计免费素材网站有哪些合肥seo服务
  • 医院网站源码下载58.搜房等网站怎么做效果才好
  • 网站首页怎么制作过程saas系统是干嘛的
  • 网站后台管理系统功能做网站如何将一张图片直接变体
  • 跨境电商网站建设方案书微信端网站页面设计
  • wordpress源码网站主题阿里seo排名优化软件
  • 做二手货车都做什么网站商标注册网查询
  • 德阳建设局网站首页做盗号网站
  • 精美大气的餐饮类企业网站怎么样建网站