精华内容
下载资源
问答
  • 口号:Android只是个Demo。 智能手机何其多,Symbian、WP、Android...,问题是原生的Android系统... 原生Android系统是不愿意还是不能够支持主题呢?以后会不会支持呢? 不管了,既然看Android原生主题支持功能不...

    口号:Android只是个Demo。

    智能手机何其多,Symbian、WP、Android...,问题是原生的Android系统不支持主题定制。

    于是我等看着花哨的主题资源包在市场上泛滥,前提:你先下载一个运行这些主题资源的应用程序APK包先。

    但是...... 原生Android系统是不愿意还是不能够支持主题呢?以后会不会支持呢?

    不管了,既然看Android原生主题支持功能不够,本文就来尝试一下如何通过修改Android原生代码来实现主题支持。

    ============================= 环境与步骤=================================

    软件版本:Android JellyBean

    步骤:

    I.原生Android主题支持需要涉及的部分

    II.涉及部分在原生系统中的逻辑及修改

    III.对周边模块的影响和支持

    =============================原生Android主题支持需要涉及的部分=================================

    既然是要支持主题,也就是说系统需要支持和管理多套主题资源包,并且应用可以用相同的资源ID来访问不同资源包中对应的资源。

    因此我们首先分析一下Android系统的资源访问流程。

    对应用来说,资源访问主要有下面三种方式:

    第一、比较普遍的方式是使用xml定义,并且通过AAPT工具生成一个R文件,列出资源的索引来让Android系统自己去遍历整个资源树的方式来访问。

    第二、通过Resources接口来访问,使用Resources类的getDrawable、getString等接口来获取资源。

    第三、通过AssetManager类的接口去访问,使用这个类的open方法来返回一个InputStream对象得到资源。

    其实这三个访问方式只是Android资源访问中整个流程中在不同层次对外提供的三个接口,到底层的实现都是殊途同归的。

    第一种的xml定义的资源解析的逻辑在Resources.java文件的loadXmlResourceParser函数中,实际上也是调用的第三类接口,如下图:

    因此我们实际上需要修改的部分主干是在访问资源具体路径前,按照当前系统主题设置访问不同资源APK下的文件

    即是把原生Android中资源ID和资源文件路径之间一对一的关系改为一对多的关系。

    例子如下:如果原有资源ID和资源文件路径关系为:

    R.drawable.image01 = 0x7F020001

    通过系统的资源查找之后找到文件路径为 /system/app/frameworks-res.apk下的res/drawable_hdpi/icon.png

    在AssetManager native中去读取资源并上传。

    那么我们需要做的是在传入路径去读取资源时把文件路径替换为/data/app/SystemTheme01.apk下的res/drawable_hdpi/icon.png

    =============================涉及部分在原生系统中的逻辑及修改=================================

    为了完成上篇所提到的修改,我们依上图分析一下原生系统中从传入资源ID到生成需要访问的资源文件的路径的过程:

    Java层:

    Resources类:

    Android在Java层为应用层访问不同类型的资源提供了一系列接口,这些接口被封装在Resources类中,例如访问字符串资源的接口getString(),访问Drawable类型资源的接口getDrawable()等等。该类还管理着另外两个重要的类:Configuration和AssetManager。

    Configuration类:

    Configuration类中主要保存了当前的系统配置信息,例如字体、语言等,在应用调用Resources类的接口去获取资源的时候,Resources类会通过Configuration类来读取当前的系统配置信息,再结合接口中收到的应用请求获取的资源ID来获取对应的资源。

    AssetManager类:

    AssetManager类提供了以数据流的方式访问应用程序资源的方法。它主要是通过Native层的方法来实现访问资源的。AssetManager管理的资源主要有两个来源:一是应用程序的资源,通过访问应用程序的APK文件来得到;另外一个是系统资源,是通过访问包含系统资源的APK文件来获得。

    Native层:

    AssetManager Native类:

    AssetManager Native类提供了对资源文件路径以及资源文件的操作支持,提供了诸如扫描APK的res路径下的文件夹和文件、对APK进行解压缩、维护ResTable类以及部分Cache加速文件的功能。

    Asset类:

    Asset类是所有类型资源类的基类,它提供了绝大部分对资源的操作实现和定义,是Android资源访问和文件访问层之间的桥梁,也是需要修改主干部分的核心。它封装了整个Android资源访问中对资源文件的路径查找以及资源从文件到数据流的转换过程。在应用传入资源ID来请求资源的时候,AssetManager会使用该类的create函数去生成一个新的资源对象,并使用读出的资源数据流赋给该对象,最后返回给上层应用。

    下图列出了系统原有逻辑及需要修改的部分:

    上面的部分已经分析了资源访问过程中需要修改的部分,但是除了访问流程的主干之外,

    系统在以下几个部分对资源访问效率做的优化同样会受到我们修改资源ID对应关系的影响。

    系统的预加载资源流程

    原有逻辑:

    系统在启动的过程中会把系统常用的资源进行预载入,  

    此逻辑位于frameworks/base/core/java/com/android/internal/os/ZygoteInit.java -- preloadResources函数

    在此函数中会调用Resources.java中函数来对com.android.internal.R.array.preloaded_XXX的资源数组中对应的资源进行预载入,

    这个流程中会通过for循环预加载三类资源Drawable、ColorStateList、ColorDrawable,

    并且存在对应的sPreloadedDrawables、sPreloadedColorStateLists、sPreloadedColorDrawables三个LongSparseArray的数组中。

    修改逻辑:

    因为主干部分已经对系统资源即framework-res.apk的资源进行了分别的处理,所以开机预载入的部分可以不做处理,

    但是在主题变化之后,预载入的资源还是系统启动时候的数据,所以需要对三个数组进行清除或者启动后台服务重新进行预载入流程。

    修改文件:Resources.java

    实现功能:在系统使用的主题包变化之后清除预载入资源数组即上面提到的三个LongSparseArray数组(可以考虑后台重新载入新主题资源数据到数组中)。

    系统访问中的资源缓存机制(清除cache)

    原有逻辑:

    在系统每次访问资源的过程中,查找资源的顺序是 预载入资源->Cache资源->资源文件

    并且在每次通过资源文件的方式查找到资源之后会把此资源加入到Cache中,加速下次访问速度。

    修改逻辑:

    在主题设置被用户修改之后,原有缓存中的数据是上个主题包的文件内容,需要清除。

    ============================= 对周边模块的影响和支持=======================================

    另:需要提供用户可以管理主题包的应用程序

    原有逻辑:(无)

    修改逻辑:

    用户在安装了主题包之后,需要提供一个应用来维护当前系统上已经存在的资源主题包。

    应用需要实现功能:扫描、预览、应用、卸载当前手机上已经安装的主题资源包。

    主要涉及:PackageManager接口、systemProperty读写。

    主题改变之后通知应用的广播

    原有逻辑:

    系统原有通知机制是ACTION_CONFIGURATION_CHANGE的Intent来通知应用系统配置改变,

    如果应用不处理,系统会默认为应用更新系统配置(Activity资源、布局等的重新载入)。

    修改逻辑:

    在系统判断是否需要发送CONFIGURATION_CHANGE的逻辑中加入如下逻辑:

    如果当前系统主题资源包发生变化,需要发送CONFIGURATION_CHANGE。

     

    草草完成Demo设计和实现,仅仅算是把功能实现了,欢迎大家继续优化、讨论。

    转载于:https://www.cnblogs.com/mobile-veterans/archive/2012/12/10/2758963.html

    展开全文
  • Android 原生系统,手机rom下载网站

    万次阅读 2017-08-16 17:06:15
    Android, 原生系统,手机rom,下载网站
    https://download.mokeedev.com/?device=angler
    
    展开全文
  • Android之一--原生Android系统主题支持的设计和实现 (来自本人博客园博客) 口号:Android只是个Demo。 智能手机何其多,Symbian、WP、Android...,问题是原生的Android系统不支持主题定制。 于是我等看着花哨...

    口号:Android只是个Demo。

    智能手机何其多,Symbian、WP、Android...,问题是原生的Android系统不支持主题定制。

    于是我等看着花哨的主题资源包在市场上泛滥,前提:你先下载一个运行这些主题资源的应用程序APK包先。

    但是...... 原生Android系统是不愿意还是不能够支持主题呢?以后会不会支持呢?

    不管了,既然看Android原生主题支持功能不够,本文就来尝试一下如何通过修改Android原生代码来实现主题支持。

    ============================= 环境与步骤=================================

    软件版本:Android JellyBean

    步骤:

    I.原生Android主题支持需要涉及的部分

    II.涉及部分在原生系统中的逻辑及修改

    III.对周边模块的影响和支持

    =============================原生Android主题支持需要涉及的部分=================================

    既然是要支持主题,也就是说系统需要支持和管理多套主题资源包,并且应用可以用相同的资源ID来访问不同资源包中对应的资源。

    因此我们首先分析一下Android系统的资源访问流程。

    对应用来说,资源访问主要有下面三种方式:

    第一、比较普遍的方式是使用xml定义,并且通过AAPT工具生成一个R文件,列出资源的索引来让Android系统自己去遍历整个资源树的方式来访问。

    第二、通过Resources接口来访问,使用Resources类的getDrawable、getString等接口来获取资源。

    第三、通过AssetManager类的接口去访问,使用这个类的open方法来返回一个InputStream对象得到资源。

    其实这三个访问方式只是Android资源访问中整个流程中在不同层次对外提供的三个接口,到底层的实现都是殊途同归的。

    第一种的xml定义的资源解析的逻辑在Resources.java文件的loadXmlResourceParser函数中,实际上也是调用的第三类接口,如下图:

    因此我们实际上需要修改的部分主干是在访问资源具体路径前,按照当前系统主题设置访问不同资源APK下的文件

    即是把原生Android中资源ID和资源文件路径之间一对一的关系改为一对多的关系。

    例子如下:如果原有资源ID和资源文件路径关系为:

    R.drawable.image01 = 0x7F020001

    通过系统的资源查找之后找到文件路径为 /system/app/frameworks-res.apk下的res/drawable_hdpi/icon.png

    在AssetManager native中去读取资源并上传。

    那么我们需要做的是在传入路径去读取资源时把文件路径替换为/data/app/SystemTheme01.apk下的res/drawable_hdpi/icon.png

    =============================涉及部分在原生系统中的逻辑及修改=================================

    为了完成上篇所提到的修改,我们依上图分析一下原生系统中从传入资源ID到生成需要访问的资源文件的路径的过程:

    Java层:

    Resources类:

    Android在Java层为应用层访问不同类型的资源提供了一系列接口,这些接口被封装在Resources类中,例如访问字符串资源的接口getString(),访问Drawable类型资源的接口getDrawable()等等。该类还管理着另外两个重要的类:Configuration和AssetManager。

    Configuration类:

    Configuration类中主要保存了当前的系统配置信息,例如字体、语言等,在应用调用Resources类的接口去获取资源的时候,Resources类会通过Configuration类来读取当前的系统配置信息,再结合接口中收到的应用请求获取的资源ID来获取对应的资源。

    AssetManager类:

    AssetManager类提供了以数据流的方式访问应用程序资源的方法。它主要是通过Native层的方法来实现访问资源的。AssetManager管理的资源主要有两个来源:一是应用程序的资源,通过访问应用程序的APK文件来得到;另外一个是系统资源,是通过访问包含系统资源的APK文件来获得。

    Native层:

    AssetManager Native类:

    AssetManager Native类提供了对资源文件路径以及资源文件的操作支持,提供了诸如扫描APK的res路径下的文件夹和文件、对APK进行解压缩、维护ResTable类以及部分Cache加速文件的功能。

    Asset类:

    Asset类是所有类型资源类的基类,它提供了绝大部分对资源的操作实现和定义,是Android资源访问和文件访问层之间的桥梁,也是需要修改主干部分的核心。它封装了整个Android资源访问中对资源文件的路径查找以及资源从文件到数据流的转换过程。在应用传入资源ID来请求资源的时候,AssetManager会使用该类的create函数去生成一个新的资源对象,并使用读出的资源数据流赋给该对象,最后返回给上层应用。

    下图列出了系统原有逻辑及需要修改的部分:

    上面的部分已经分析了资源访问过程中需要修改的部分,但是除了访问流程的主干之外,

    系统在以下几个部分对资源访问效率做的优化同样会受到我们修改资源ID对应关系的影响。

    系统的预加载资源流程

    原有逻辑:

    系统在启动的过程中会把系统常用的资源进行预载入,  

    此逻辑位于frameworks/base/core/java/com/android/internal/os/ZygoteInit.java -- preloadResources函数

    在此函数中会调用Resources.java中函数来对com.android.internal.R.array.preloaded_XXX的资源数组中对应的资源进行预载入,

    这个流程中会通过for循环预加载三类资源Drawable、ColorStateList、ColorDrawable,

    并且存在对应的sPreloadedDrawables、sPreloadedColorStateLists、sPreloadedColorDrawables三个LongSparseArray的数组中。

    修改逻辑:

    因为主干部分已经对系统资源即framework-res.apk的资源进行了分别的处理,所以开机预载入的部分可以不做处理,

    但是在主题变化之后,预载入的资源还是系统启动时候的数据,所以需要对三个数组进行清除或者启动后台服务重新进行预载入流程。

    修改文件:Resources.java

    实现功能:在系统使用的主题包变化之后清除预载入资源数组即上面提到的三个LongSparseArray数组(可以考虑后台重新载入新主题资源数据到数组中)。

    系统访问中的资源缓存机制(清除cache)

    原有逻辑:

    在系统每次访问资源的过程中,查找资源的顺序是 预载入资源->Cache资源->资源文件

    并且在每次通过资源文件的方式查找到资源之后会把此资源加入到Cache中,加速下次访问速度。

    修改逻辑:

    在主题设置被用户修改之后,原有缓存中的数据是上个主题包的文件内容,需要清除。

    ============================= 对周边模块的影响和支持=======================================

    另:需要提供用户可以管理主题包的应用程序

    原有逻辑:(无)

    修改逻辑:

    用户在安装了主题包之后,需要提供一个应用来维护当前系统上已经存在的资源主题包。

    应用需要实现功能:扫描、预览、应用、卸载当前手机上已经安装的主题资源包。

    主要涉及:PackageManager接口、systemProperty读写。

    主题改变之后通知应用的广播

    原有逻辑:

    系统原有通知机制是ACTION_CONFIGURATION_CHANGE的Intent来通知应用系统配置改变,

    如果应用不处理,系统会默认为应用更新系统配置(Activity资源、布局等的重新载入)。

    修改逻辑:

    在系统判断是否需要发送CONFIGURATION_CHANGE的逻辑中加入如下逻辑:

    如果当前系统主题资源包发生变化,需要发送CONFIGURATION_CHANGE。

     

    草草完成Demo设计和实现,仅仅算是把功能实现了,欢迎大家继续优化、讨论。

    本文原创,请勿用于商业用途。 转载请注明出处:http://www.cnblogs.com/mobile-veterans
    展开全文
  • 作为Android系统开发者,编译AOSP是无法避免的,下载Nexus系列的AOSP image来使用也是无法避免的。如果是我们自己编译AOSP的话,我们可以选择eng版本,从而省去这些验证步骤,同时也没有各种权限问题,当然SeLinux...

    网络访问问题

    作为Android系统开发者,编译AOSP是无法避免的,下载Nexus系列的AOSP image来使用也是无法避免的。如果是我们自己编译AOSP的话,我们可以选择eng版本,从而省去这些验证步骤,同时也没有各种权限问题,当然SeLinux还是有问题的,但是我们可以很容易的关闭。

    如果我们需要下载,或者使用product版本的aosp image,那么一般在第一次开机后,Android系统需要连接google网站,然后让我们选择登录google帐号,如果无法连接到google,那么其实我们是无法进入系统的。因此问题就在于,如何连接到google。

    方法

    方法有多重,根据个人的开发环境各异,但是一般不外乎下面这两种:

    • 1. 路由器直接有SS可以访问网络
    • 2. 使用代理

    如果路由器已经可以访问google,那么也就容易了,但是对于大多数开发者而言,使用第二种方式较为实用和普遍也非常的容易实现。

    准备

    要使用第二种方式,我们需要下面这些东西:

    1. Wifi热点,笔记本自带的一般就可以,也可以使用路由器

    2. SS帐号密码,可以到淘宝卖SS的地方找一个试用的来暂时使用,最好是自己的SS Server

    步骤

    设置LAN共享

    如果某台电脑已经可以连接到SS Server,那么可以使用SS Client设置LAN共享:

    开启全局模式

    设置手机上面的Proxy

    在wifi连接上面,选择Advance Option,然后选择里面的Proxy,并使用manual setting,然后在里面的代理服务器中,输入我们电脑的IP,端口选择SS的Local Port,例如1080.

    然后确定即可连接。


    另外,也可以使用X-wall这个软件来做代理。



    展开全文
  • 于是在网上找了下把Nexus S(i9023)从miui刷回原生android系统的方法,在这里整理发布出来,并提供i9023刷机包的下载。 注:本人亲测i9023,i9020的童鞋们谨慎尝试! 一、准备工作 1、数据线 2、备份手机中的...
  • 简述DownloadManger是android 2.3(API 9)开始提供的系统服务,用于处理长时间的下载操作。应用场景是客户端请求一个URL地址去下载一个目标文件。DownloadManger可以构建一个后台下载服务,在发生故障或连接更改、...
  • Android Google原生系统刷机

    千次阅读 2019-10-17 10:39:08
    Google原生系统 androidsage 第三方 REC orangefox TWRP 原生跳过谷歌向导 安装步骤 TWRP I. 下载第三方 Recovery,如果想要刷非本机系统,则需要刷入该工具。 选择对应手机型号及手机版本,并下载 II. ...
  • 1、源码下载前参数配置 1️⃣配置usb所需 sudo apt-get update sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \ lib...
  • Nexus6 Android原生系统刷机方法

    千次阅读 2017-03-01 11:22:12
    Nexus6 Android原生系统刷机方法 友情提示: 非Nexus系列手机请谨慎尝试 准备工作: 电脑端需要提前配置好adb环境,版本最好是1.0.32以上 (原因:低版本的adb不支持比较大的镜像刷入) ROM包下载地址:...
  • ##3.1 Android原生源码下载 ================================================= 官网参考链接,下载页面:https://source.android.com/source/downloading.html 官网参考链接,tag页面:...
  • android原生App系统:打印实现解决方案

    千次阅读 2018-05-25 14:05:36
    一、解决方案核心思路 1建立Word模板文件-》2 App下载模板文件-》3 App本地利用POI技术填充模板-》4 App利用Wps开发包API将文件转换为Pdf文件-》5App将Pdf文件发布给打印工场App 二、解决方案核心优势与不足 ...
  • 二、不需要申请开发者,QQ直接登录,下载即可集成到项目中。 三、与原生的webview对比优势 1) 速度快:相比系统webview的网页打开速度有30+%的提升; 2) 省流量:使用云端优化技术使流量节省20+%; 3) 更安全:...
  • APP的留存和活跃度是企业主非常看重的数据,而企业主拓展一个用户下载app,平均成本高达192元!企业花了将近200块钱,用户可能两分钟就卸载了。一个长久稳定的用户,成本之高,难以想象。 中国的互联网企业竞争异常...
  • 在现在的app开发市场,前有跨平台框架,后有...移动市场的争夺1、开发方面原生App:因为不同的操作系统,架构不同所以针对不同的操作系统需要各自开发。开发的成本以及维护成本较webapp要高一些,并且开发的速度也没...
  • 因为之前没有用过安卓更没刷过系统,完全陌生,安装过程遇到了一系列问题,刚开始用线刷宝下载安装了6.0,V6稳定版。后面发现并不是原生系统,还是不能上google play. 然后一通查找才发现一定要安装非小米官方的...
  • Android菜谱推荐系统(前台android原生,后台java,SSH,mysql)(程序代码,MySQL数据库) 【运行环境】MyEclipse(后台) Eclipse(前台) JDK1.7 tomcat7 【技术栈】JAVA, JSP, mvc,SSH, MYSQL, HTML, CSS, JAVASCRIPT, ...
  • 还有就是依赖GMS核心的都不准备讲,只介绍开源的第三方项目,可以发布到华为,小米等国内Android系统的类库。 5. 这里只是介绍Android的原生开发,不介绍Flutter,React Native,Hipppy等跨平台框架。选择原生框架的...
  • 安卓4.2.2原生系统UI

    2014-06-20 21:23:45
    安卓4.2.2原生系统UI(Google Android 4.2.2)现已免费提供下载
  • 使用gdb调试android原生程序

    万次阅读 2014-03-01 20:43:19
    Android NDK目录下的gdb虽然可以调试android程序,但是这个不包含符号信息,调试时需要设置Android系统动态链接库的符号加载路径,并且只能调试拥有调试信息的原生程序,而一般情况下,使用 Android NDK编译的原生...
  • 关于android系统编译

    2016-04-07 01:54:32
    如果下载android原生系统的,可以通过国内镜像下载速度会快很多,但是哪个没有内核源码,如果cm源码,是带内核的 下面是国内下载镜像,里面都有详细下载过程说明,但是最好翻gfw,因为下载驱动还是要的,如果只是跑...
  • 目标是在Android平台上,利用原生SerialPort,开发一个串口demo,对串口进行测试(能收发证明没问题) 1.权限 因为使用了原生的SerialPort,所以要声明一些权限 AndroidManifest.xml里需要声明此权限: 因为这个...
  • 1.先创建模拟器 ...这里需要下载对应的api 可以看需要下载 然后一路下一步完成创建(注:创建时模拟器名称中的空格使用时会变成_所以最好不要带空格) 至此模拟器创建完成; 查看模拟器列表:cordov...
  • Google Android开发博客今天宣布,即日起开放针对Android平台的原生软件开发SDK下载。由于在SDK前面又加上了“原生”二字,即Native Development Kit,因此又...原生SDK的公布可以让开发者更加直接的接触Android系统...
  • 智能手机何其多,Symbian、WP、Android...,问题是原生的Android系统不支持主题定制。 于是我等看着花哨的主题资源包在市场上泛滥,前提:你... 原生Android系统是不愿意还是不能够支持主题呢?以后会不会支持呢...
  • 1.首先要下载原生应用,原生应用在原生系统里面(当然你得先下载原生系统,过程请百度之)。 目录如下:packages\apps,所有的原生基础应用都在这个里面,我们进入DeskClock目录,将其作为一个工程搭建起来。 这...
  • 在Eclipse下编译Android原生APK方法

    千次阅读 2014-01-13 16:37:14
    1. 在eclipse环境下,编译Android原生的apk 2. 在eclipse环境下,做system系统签名的方法。(有很多,这里在windowsxp下做脚本处理) 前提条件: 1. 下载android源码; 2. 编译android源码; 以上两步网上有很...
  • 安卓原生系统中邮件的代码 An droid包含了原始An droid的目标机代码主机编译工具仿真环境下载的代码包经过 解压后这里是Android2.2的源码包源代码的第一层目录结构如下 |-- Makefile |-- bionic|-- bootable |-- ...
  • 之前将Nexus5刷成了MIUI系统,现在想体验一下安卓6.0,网上都是windows的教程,但如何在linux下刷机呢? 首先准备环境和工具: ...2. 下载刷机工具包:https://dl.google.com/android/repository/platform-tools_...
  • Android 8.1 、Android Settings 谷歌原生,安卓系统设置应用,源码下载。。。。。。。。。
  • 一,学习android系统源码下载,编译的作用 1,可以自己 DIY 自己的rom系统,从系统层面,宏观的加深理解 android系统 2,编译自己的 userdebug(原生root权限) rom, 方便调试。 2,可以看到系统所有的 source ...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 266
精华内容 106
关键字:

原生android系统下载