android框架

Android拓展系列(6)--CM9源码下载和编译

为君一笑 提交于 2020-01-11 12:55:48
公司最近也开始基于android4.0 ICS修改框架了,公司的手机暂时不适合拿回家测试,也没有kernel的权限。 从个人的角度看,我手上现在有两部手机,一部是Htc G9 Aria,一部是Samsung I9100 Galaxys2,Cyanogenmod的开源代码都提供了对这些手机的驱动支持,并且能方便的编译打包,并安装到手机。 上一篇文章是android2.3的编译,已经过时,而且现在ubuntu已经升级到12.04,等等之类的,使我觉得非常有必要重新写一篇新的博客来展示最新的android怎么在最新的ubuntu上编译。 基于以上几点,下面我将基于galaxys2来演示如何编译cm9的源码并打包zip安装到手机。下面是我的参考文章: http://source.android.com/source/initializing.html http://forum.xda-developers.com/showthread.php?t=1552090 https://github.com/CyanogenMod/android 这些链接或多或少会有一些问题,从这些这些东西我整理出最简单最有效的一条编译之路,也许会很上面这些文章很多步骤和说法上不一致。 1.ubuntu12.04的选择 我第一次用x64的系统,发现配置环境的时候,会有很多种错误,后来我用32位的系统

Android 拨打电话代码实现 (附加 :AOP切面实现方式)

怎甘沉沦 提交于 2020-01-10 07:05:43
序 今天是 2020 年的第一场大雪 ,朋友圈都在发 瑞雪兆丰年 。 直接上代码 1. 直接拨打电话 public void callPhone(String phoneNum) { Intent intent = new Intent(Intent.ACTION_CALL); Uri data = Uri.parse("tel:" + phoneNum); intent.setData(data); startActivity(intent); } PS :需要申请权限 <uses-permission android:name="android.permission.CALL_PHONE" /> 2.跳转拨打电话界面 public void callPhone(String phoneNum) { Intent intent = new Intent(Intent.ACTION_DIAL); Uri data = Uri.parse("tel:" + phoneNum); intent.setData(data); startActivity(intent); } PS :无需申请权限 在权限申请的时候 ,正常来说第一次点击需要弹出系统申请权限的一个弹窗 。你允许之后再次点击拨打电话功能就可以进行拨号了 。 AOP 权限申请 (切面编程) 可能在权限申请功能对这个需求要求不太高

上拉更新,下拉刷新

…衆ロ難τιáo~ 提交于 2020-01-10 00:03:01
第三方控件 :https://github.com/scwang90/SmartRefreshLayout 首先添加依赖 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //布局 <com.scwang.smartrefresh.layout.SmartRefreshLayout android:layout_below ="@id/include" android:id="@+id/srl_layout" android:layout_width="match_parent" android:layout_height="match_parent" app:srlEnableAutoLoadMore="false"> //下拉刷新 <com.scwang.smartrefresh.layout.header.ClassicsHeader app:srlTextRelease="@string/Refresh" android:layout_width="match_parent" android:layout_height="wrap_content" /> <androidx.recyclerview.widget.RecyclerView android:scrollbars="none"

Android开发最佳学习路线图

可紊 提交于 2020-01-09 14:47:18
为了帮助大家更好的学习Android开发的相关知识,尚观4G智能操作系统研究室(www.up4g.com)为大家制作以下学习路线图;希望能帮助到广大的android爱好者。 在开始之前我们先来对相关知识进行一个简单的了解: 行业背景: 今天,涉及通信产业链中的每个环节,都有Android的身影,Android是第一款完全完整打通了整个通信产业链中的操作系统,手机方案商、集成商、运营商、内容提供商、用户,都在玩Android,都惊讶于Android的爆发式增长速度,Android现在每天有超过50万台新的Android设备启用。 随着Android平台的扩张,引发了Android人才荒,未来人才需求缺口将达百万。但符合条件的Android工程师屈指可数,企业招聘难度可想而知。据新京报等媒体报道Android工程师一年经验月薪8000元,对此李开复曾在微博谏言学生转学Android软件开发。我们相信,在未来几年内,Android开发工程师将成为3G行业炙手可热的岗位之一。 什么是Android: Android是一种以Linux为基础的开放源码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用安卓(非官方)或安致(官方)。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资

Android组件化和插件化开发

泪湿孤枕 提交于 2020-01-09 04:16:56
什么是组件化和插件化? 组件化开发 就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk,这就是组件化开发。 插件化开发 和组件化开发略有不同,插件化开发时将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk(组件化的每个模块是个lib),最终打包的时候将宿主apk和插件apk分开或者联合打包。 组件化 概述 android工程的组件一般分为两种,lib组件和application组件 application组件 是指该组件本身就可以运行并打包成apk lib组件 是指该组件属于app的一部分,可以供其它组件使用但是本身不能打包成apk 为什么要有组件化? 加入一个app工程只有一个组件,随着app业务的壮大模块越来越多,代码量超10万是很正常的,这个时候我们会遇到以下问题 稍微改动一个模块的一点代码都要编译整个工程,耗时耗力 公共资源、业务、模块混在一起耦合度太高 不方便测试 组件化正确的姿势 既然选择使用组件化,那么如何正确的使用它呢?这里给出一种解决方案,如果你有更好的方案,欢迎交流。 我们创建了一个app工程project,默认里面有一个app组件,这个app组件是可以直接运行的。 怎么划分组件呢? 1

WebView性能、体验分析与优化

我怕爱的太早我们不能终老 提交于 2020-01-09 01:03:26
在App开发中,内嵌WebView始终占有着一席之地。它能以较低的成本实现Android、iOS和Web的复用,也可以冠冕堂皇的突破苹果对热更新的封锁。 然而便利性的同时,WebView的性能体验却备受质疑,导致很多客户端中需要动态更新等页面时不得不采用其他方案。 以发展的眼光来看,功能的动态加载以及三端的融合将会是大趋势。那么如何克服WebView固有的问题呢?我们将从性能、内存消耗、体验、安全几个维度,来系统的分析客户端默认WebView的问题,以及对应的优化方案。 性能 对于WebView的性能,给人最直观的莫过于:打开速度比native慢。 是的,当我们打开一个WebView页面,页面往往会慢吞吞的loading很久,若干秒后才出现你所需要看到的页面。 这是为什么呢? 对于一个普通用户来讲,打开一个WebView通常会经历以下几个阶段: 交互无反馈 到达新的页面,页面白屏 页面基本框架出现,但是没有数据;页面处于loading状态 出现所需的数据 如果从程序上观察,WebView启动过程大概分为以下几个阶段: 如何缩短这些过程的时间,就成了优化WebView性能的关键。 接下来我们逐一分析各个阶段的耗时情况,以及需要注意的优化点。 WebView初始化 当App首次打开时,默认是并不初始化浏览器内核的;只有当创建WebView实例的时候,才会创建WebView的基础框架。

build.gradle 详解

寵の児 提交于 2020-01-08 19:20:53
简述:   1) Java 开发中有两个大名鼎鼎的项目构建 ANT、Maven。   2) Google 推荐使用的 Android studio 是采用 Gradle 来构建项目。Gradle 是一个非常先进的项目构建工具。   Gradle 是用了一种基于 Groovy 的领域特定语言(DSL,Demain Specific Language)来声明项目设置,摒弃了 XML(如 ANT 和 Maven)的各种繁琐配置。   3) 项目中一般会出现2个或者多个 build.gradle 文件,一个在根目录下,一个在 app 目录下。   如果切换到 Android 模式下则全部在 Gradle Scripts。 1. 根目录下的 build.gradle   1) repositories 闭包,声明了 jcenter() 的配置;   2) dependencies 闭包,声明了一个 Gradle 插件。 buildscript { repositories { //repositories闭包 google() jcenter() //代码托管库:设置之后可以在项目中轻松引用jcenter上的开源项目 } dependencies { //dependencies闭包 classpath 'com.android.tools.build:gradle:3.0.0' ///

Kotlin DSL详解

佐手、 提交于 2020-01-08 10:23:33
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> DSL简介 所谓DSL领域专用语言(Domain Specified Language/ DSL),其基本思想是“求专不求全”,不像通用目的语言那样目标范围涵盖一切软件问题,而是专门针对某一特定问题的计算机语言。总的来说 DSL 是为了解决系统(包括硬件系统和软件系统)构建初期,使用者和构建者的语言模型不一致导致需求收集的困难。 举一个具体的例子来说。在构建证券交易系统的过程中,在证券交易活动中存在许多专业的金融术语和过程。现在要为该交易过程创建一个软件解决方案,那么开发者/构建者就必须了解证券交易活动,其中涉及到哪些对象、它们之间的规则以及约束条件是怎么样的。那么就让领域专家(这里就是证券交易专家)来描述证券交易活动中涉及的活动。但是领域专家习惯使用他们熟练使用的行业术语来表达,解决方案的构建者无法理解。如果解决方案的模型构建者要理解交易活动,就必须让领域专家用双方都能理解的自然语言来解释。这种解释的过程中,解决方案的模型构建者就理解了领域知识。这个过程中双方使用的语言就被称为“共同语言”。 共同语言称为解决方案模型构建者用来表达解决方案中的词汇的基础。构建者将这些共同语言对应到模型中,在程序中就是模块名、在数据模型中就是实体名、在测试用例中就是对象。在上面的描述,如果要成功构建模型

Android Q Android 10 报错 .jpeg: open failed: EACCES (Permission denied)

你。 提交于 2020-01-08 04:09:38
在 AndroidManifest.xml 中加入 android:requestLegacyExternalStorage="true" ,如下: android:requestLegacyExternalStorage="true" 绕了很大弯路,基本上重写了权限框架, 1 <application 2 android:name=".App" 3 android:allowBackup="true" 4 android:icon="@drawable/logo" 5 android:label="@string/app_name" 6 android:requestLegacyExternalStorage="true" 7 android:roundIcon="@drawable/logo" 8 android:supportsRtl="true" 9 android:theme="@style/AppTheme" 10 android:usesCleartextTraffic="true" 11 12 。。。。。 https://developer.huawei.com/consumer/cn/doc/50127 来源: https://www.cnblogs.com/endv/p/12164605.html

Android Application

天涯浪子 提交于 2020-01-07 12:24:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一.简介 Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息。 Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。 通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并添加自己的 Application的名字即可)。 启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。 Application对象的生命周期是整个程序中最长的