最近在知乎上看到介绍动画,一个谷歌的项目:topeka的源码

谷歌为移动平台设计的Chrome应用中的第一个应用,也就是说越来越多的应用可以同时支持在安卓手机和PC上的Chrome浏览器中运行了。
至于游戏,官方介绍只有一句话:一部有趣的问答应用!

想研究一下,了解大神都怎么写代码的…..

首先是清单文件

    <application android:allowBackup="false"
android:fullBackupContent="false"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="false"
android:theme="@style/Topeka"
tools:ignore="GoogleAppIndexingWarning,UnusedAttribute">

<activity android:name=".activity.SignInActivity"
android:theme="@style/Topeka.SignInActivity"
android:windowSoftInputMode="adjustPan">

android:allowBackup

1.allowBackup安全风险描述

Android API Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中AndroidManifest.xml文件中的allowBackup属性值[1] ,其属性值默认是True。当allowBackup标志为true时,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复,这可能会带来一定的安全风险。

Android属性allowBackup安全风险源于adb backup容许任何一个能够打开USB 调试开关的人从Android手机中复制应用数据到外设,一旦应用数据被备份之后,所有应用数据都可被用户读取;adb restore容许用户指定一个恢复的数据来源(即备份的应用数据)来恢复应用程序数据的创建。因此,当一个应用数据被备份之后,用户即可在其他Android手机或模拟器上安装同一个应用,以及通过恢复该备份的应用数据到该设备上,在该设备上打开该应用即可恢复到被备份的应用程序的状态。

尤其是通讯录应用,一旦应用程序支持备份和恢复功能,攻击者即可通过adb backup和adb restore进行恢复新安装的同一个应用来查看聊天记录等信息;对于支付金融类应用,攻击者可通过此来进行恶意支付、盗取存款等;因此为了安全起见,开发者务必将allowBackup标志值设置为false来关闭应用程序的备份和恢复功能,以免造成信息泄露和财产损失。

2.allowBackup安全影响范围

Android API Level 8以及以上系统

3.allowBackup安全风险详情

1)allowBackup 风险位置:

AndroidMannifest.xml文件android:allowBackup属性;

2) allowBackup风险触发前提条件:

未将AndroidMannifest.xml文件中的android:allowBackup属性值设为false;

3) allowBackup风险原理:

当allowBackup标志值为true时,即可通过adb backup和adb restore来备份和恢复应用程序数据;

出于安全考虑,阿里聚安全建议关闭应用备份功能; 在AndroidMenifest.xml文件中,将相应组件的“android:allowBackup”属性设置为“false”

from:Android属性allowBackup安全风险浅析

android:fullBackupContent

AndroidM 新特性 Auto Backup for Apps

自动备份用户信息和数据,简直太棒了!不用开发者自己写代码,不用自己在sd卡上创建乱七八糟的文件夹,android M会自己备份app信息。对于强迫症同学真是福音。

<app ...
android:fullBackupContent="@xml/mybackupscheme">
</app>

但是谷歌不建议使用
Google Cloud Messaging - For apps that use Google Cloud Messaging for push notifications, there is a known issue where backing up the registration ID returned by Google Cloud Messaging registration can break push notifications for the restored app. It is important to query the API for a new registration ID after being installed on a new device, which is not be the case if the old registration ID was backed up. To avoid this, exclude the registration id from the set of backed up files.
from 知乎回答

android:supportsRtl=”false”

设置android:supportsRtl=”true”无效问题

内容如下:
今天解bug时,遇到这样一个问题:
问题描述:切换系统语言为阿拉伯文时,actionbar布局没有变为从右向左排列。
于是,我在Androidmanifest.xml文件中的 application 标签内加上 android:supportsRtl=”true”属性,发现没有起到效果。
原因在于 Androidmanifest.xml中对最小SDK版本和目标版本做了要求:
<uses-sdk android:minSdkVersion="11"
android:targetSdkVersion="11" />

而使用android:supportsRtl=”true”要求最低SDK版本为17,再将上面那两句直接删除或者是修改为>=17的版本即可。
注意:
由于布局方向可以是从右到左的,所以在写xml布局的时候,为了防止出现布局混乱的现象,不要使用诸如layout_marginRight这种,而应该是layout_marginEnd这种。

这个和 MarginStart Marginend要放在一起解释

具体请看:
Android MarginLeft与MarginStart的区别
最关键一段:
一般情况下,View开始部分就是左边,但是有的语言目前为止还是按照从右往左的顺序来书写的,例如阿拉伯语,在Android 4.2系统之后,Google在Android中引入了RTL布局,更好了支持了由右到左文字布局的显示,为了更好的兼容RTL布局,google推荐使用MarginStart和MarginEnd来替代MarginLeft和MarginRight,这样应用可以在正常的屏幕和由右到左显示文字的屏幕上都保持一致的用户体验。

android:windowSoftInputMode=”adjustPan”

对于软键盘的接介绍可以看这两篇文章:
adjustResize和adjustPan的比较
—adjustPan———————–
keyword:不管屏幕布局是RelativeLayout还是LinearLayout,当Activity设定为adjustPan模式时,效果都是一样的。点击编辑框时,软键盘弹出来。如果光标被软键盘挡住,那么整个屏幕往上平移,直至看到光标为止。
——-adjustResize————–
编辑框在RelativeLayout中定义。编辑框上边(above)的列表组件的高度不会缩小为0,导致显示出现一点问题。当信息列表中有信息时,当输入一定行数,比如超过9行,编辑框上边会出现重叠的内容。

将RelativeLayout改成LinearLayout,在编辑框上边的listView控件的height设定为0dip且weight设定为1。

将Activity都设定为adjustResize模式。在软键盘弹出时,列表控件的高度会逐渐缩小直至为0。

Android软键盘弹出引起的各种不适终极解决方案

总而言之:
在androidMainfest.xml文件中在此Activity中写入 android:windowSoftInputMode=”adjustPan” 可以让界面不被弹出的键盘挤上去。

android:hardwareAccelerated=”true”

分享:android之hardwareAccelerated你不知道的一些问题

android学习——控制硬加速 hardwareAccelerated 在3.0才有的。

keyword:
在Android中,可以四给不同层次上开启硬件加速:

1、Application

2、Activity

3、Window

getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

4、View

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

在这四个层次中,应用和Activity是可以选择的,Window只能打开,View只能关闭。
在apk的AndroidManifest中,如果指定了minSDKVersion&targetSDKVersion=7,会使得应用无法使用硬件加速进行绘图。

Android笔记-hardwareAccelerated 硬件加速详解

style研究

style="@style/TextAppearance.AppCompat.Display4"
style="@style/TextAppearance.AppCompat.Display3"
style="@style/TextAppearance.AppCompat.Display2"
style="@style/TextAppearance.AppCompat.Display1"
style="@style/TextAppearance.AppCompat.Headline"
style="@style/TextAppearance.AppCompat.Title"
style="@style/TextAppearance.AppCompat.Subhead"
style="@style/TextAppearance.AppCompat.Body2"
style="@style/TextAppearance.AppCompat.Body1"
style="@style/TextAppearance.AppCompat.Caption"
style="@style/TextAppearance.AppCompat.Button"

Button使用Material Design标准样式

style="@style/Widget.AppCompat.Button"
style="@style/Widget.AppCompat.Button.Borderless"
style="@style/Widget.AppCompat.Button.Borderless.Colored"
style="@style/Widget.AppCompat.Button.Small"

from:一个优秀的Android应用从建项目开始

tools:context=”activity.SignInActivity”的作用

tools:context=”activity name”这一句不会被打包进APK。只是ADT的Layout Editor在你当前的Layout文件里面设置对应的渲染上下文,说明你当前的Layout所在的渲染上下文是activity name对应的那个activity,如果这个activity在manifest文件中设置了Theme,那么ADT的Layout Editor会根据这个Theme来渲染你当前的Layout。就是说如果你设置的MainActivity设置了一个Theme.Light(其他的也可以),那么你在可视化布局管理器里面看到的背景阿控件阿什么的就应该是Theme.Light的样子。仅用于给你看所见即所得的效果而已。

TextView 采用了 android :text , 而 EditText中使用了 tools:text ,右边Layout 编辑器会显示内容Name , sample name 两个 字体, 如果你运行代码后编译,生成apk 后,终端就只显示Name,不会显示Sample Name这个字样. 大家可以试试运行,看下效果就知道。。
( 比如我们在布局TextView 中想要显示一段文字时,以前使用android:text显示,然后在编译器中布局调整,最后完成后删除android:text属性。有了tools参数后,可以直接使用tools:text在预览时显示文字即可,省却了上面删除的麻烦,编译后此tools:text 相当于注释了。)
tools:text 这个相当受用啊 防止打包时把测试数据带进去
from: android基础–tools:context=”.MainActivity”作用

更全面的介绍:android中xml tools属性详解

tools:ignore=”MergeRootFrame,Overdraw,UnusedAttribute”
这个是告知lint检查的时候忽略掉提示你使用merge标签来替换FrameLayout。

from:ignore=”MergeRootFrame” 有什么用

tools:showIn=”@layout/activity_main”

Android Studio 使用该属性。通常用在被其他布局文件引用的 布局文件中。告诉编辑器该布局文件用在另外一个布局文件中。例如

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.susan.testdemo8.MainActivity"
tools:showIn="@layout/activity_main">

这将允许您“在上下文中”查看和编辑这个布局。需要 Studio 0.5.8 或更高版本。

更多Tools的介绍:android中xml tools属性详解

更多相关文章

  1. Java对象创建的过程及对象的内存布局与访问定位
  2. 封装底部dialog弹窗 adapter T类型的适配同种布局不同实体类
  3. Android中使用HorizontalScrollView横向滑动布局
  4. 尝试查看所有XML文件的图形布局时出现StackOverFlowError
  5. 实现微信布局的四种方式(一)
  6. 无法将视图添加到相对布局
  7. findViewById()返回布局XML中自定义组件的null,而不是其他组件
  8. Android自定义View-----上下拖动布局--SlideContentLayout
  9. 图形布局和实际设备上的布局不同

随机推荐

  1. Android 之ActivityThead、ActivityManag
  2. 获取Android设备上的详细的摄像头信息
  3. ListView setOnItemClickListener无效原
  4. Android笔记二十三.Android基于事件监听
  5. Bitmap and DrawPoint
  6. Android笔试(一)
  7. Android 学习笔记1:基本架构
  8. Android开发入门教程1-初试Android
  9. js判断浏览器所在的客户端类型
  10. Android解析服务器端发来的xml数据示例