全部 文章 问答 分享 共找到246个相关内容

[文章] AOSP-android开源项目必备基础知识Shell
AOSP-android开源项目必备基础知识Shell不管是做运维还是做android系统开发,都要学习shell这里我们主要是针对android系统开发,AOSP-android开源项目。

[文章] AOSP-android必备基础知识 Linux Shell
# 为什么要学习Shell呢?不管是做运维还是做android系统开发,都要学习shell这里我们主要是针对android系统开发,AOSP-android开源项目。我们学习Shell有两个目的,一个是能看懂编译控制脚本,另外一个是能够修改或者说可以编写编译控制脚本。什么是Shell如果你接触计算机多年,可能有人跟你说过黑乎乎的命令行窗口就是shell,Windows有命令行窗口,而Linux各个发行版本也有命令行窗口。我们先不管这个。我们平时都是通过UI交互来控制操作系统。从一个整体的角度看操作系统,应该如下:而shell命令行窗口就是前面我们提到的小黑窗了。对于一般的用户来说,比较常用的是可视化操作,比如说复制一个文件,而shell命令行窗口里输入命令也可以实现复制文件。shell能做的,可视化操作不一定有,而可视操作有的,shell一定有。shell就是黑乎乎的命令行窗口,对不对呢?应该说还不够准确,这只是其中一个入口。除了使用命令行窗口输入命令,编程语言使用系统的API也可是可以调用shell命令的,我们也可以通过编写shell脚本去执行。shell应该是一个命令解析器,解析来自脚本的命令或者第三方应用的指令给操作系统。Shell脚本接下来我们就开始学习一下shell脚本,环境限制哈,今天周六休息写这篇文章,在家里没有服务器,所以不能结合实际的AOSP实际例子分析了,但是理解了这些知识,也是可以看懂shell脚本的。shell解析器我现在有一个树莓派的机器,里面也是基于Linux的一个系统,怎么查看解析器呢?而默认的解析器则是/bin/sh一般来说,我们在写shell脚本的时候,需要指定解析器,否则就使用默认的解析器。shell开始shell脚本以#!/bin/bash开头,看过AOSP里shell脚本的同学可能有印象,它并没有以这个开头,如果不指定的话,默认就是/bin/bash作为shell的解析器。helloworld!wq保存,解析一下:除了用sh以外,我们还可以这样子执行脚本:但是调用./helloworld.sh的时候要注意,先修改权限,否则没法执行这个脚本的。eg2:我们再来一个例子,把上面的动作转在命令去完成:1、在~/shell_code/目录下面创建一个名字为helloworld2.sh的文件2、往这个文件里写入内容:输出helloworld这其实对着我们AOSP里的自动控制流程了,一些重复的操作就可以抽象出来,用脚本代替。执行一看看结果如何?shell变量在shell脚本中,变量分成两类,一类是系统定义的变量,一类是用户自己定义的变量。常用的系统变量有哪些呢?比如说前面提到的:$SHELL,还有$HOM,$USER,$PATH,$PWD….我们可以输出来看看它们的值是什么:执行结果:这个了解一下就好,以后写脚本的时候可以使用到,写多几次就记住了。知道这些,如果以后要复制文件呀,或者添加环境变量之类的就简单得多了,对吧。自己定义变量怎么玩呢?跟我们的java不一样,直接变量=值就可以了。不需要生命类型eg:a=10echo$a注意哦,赋值没有空格。字符串也一样,shell脚本是若类型语言,不类型,跟javaScript一样。静态变量,也就是常量,只读的哦,不可以unsetreadonlyb=20echo$b#看结果会不会报错unset$b定义变量有什么规则呢?名字,明明规则不多说了,都是有经验的开发人员;赋值等号两边没有空格;赋值的内容默认为字符串类型,需要进行一个转换才能进行运算;参数/字符串有空格,需要用双引号以表示成一体的。如何把局部变量提升成全局变量,让其他地方可以访问呢?比如说我们在shell脚本里定义一个变量VAR=10,怎么样可以直接在命令行中访问呢?var.sh#!/bin/bashecho$VARshell中特殊的变量$n,其中n表示数字,从0开始,一般不超过10$n表示什么呢?我们输出一下吧:执行结果:我们java的main函数也是可以传参数的,这里面的话大家理解一下就好,当我们执行一下shell的时候,可以传进来参数。如果是$1那么是第二个参数,我再修改一个代码:相信大家理解了吧:$#,这也是一个特殊变量,它表示的是参数的个数。在java中可以用不定参数来表示,然后以数据的形式进行获取。在shell中,我们获取到了参数的个数以后,可以进行遍历,下面我们就举例说明一下吧:这里面我们还没有学到循环语句,我们就只读取参数的个数即可#!/bin/bashecho"parametercountis--->$#"shell中的运算符对于运算符大家应该很熟悉了吧上图来自己菜鸟看这篇文章的都是有经验的程序员了,这些东西应该非常简单的要注意的点:expr后面要有空格,运算符两边要有空格,会看就好这里跟赋值不一样,需要双等号的两边需要有空格基本格式是这样子的$((运算表达式))或者写成$[运算表达式]条件语句语法:[空格条件空格]条件两边要有空格条件里只要有内容就为true,除非为空为false,接着就是判条件比如说:[abc]返回true,[]返回false常用的条件判断=比较字符串-lt小于(lessthan)-gt大于(greaterthan)-ne不等于(notequal)-eq等于(equal)-le小于等于(lessequal)-ge大于等于(greaterequal)记住几个单词怎么切换都行对吧!接直来除了这些以外,我们还有可能判断到文件是否可以读写之类的-r判断文件是否可读,true表示可读,false表示不可读-w判断写-x判断是否可执行-e判断文件是否存在-f判断是不是文件-d判断是不是一个目录后面我们结合条件语句来写一些例子shell中的流程语句流程控制语句在各种编程言中都有的呢,在shell中也有if的判断case语句for循环while循环if判断语句先上代码吧,我们判断两个数是否相等,用到前面的执行结果怎么样的呢?当然是输出a=b啦if语句有两种写法:if[条件];then程序逻辑fi第二种写法,就是then换下来:if[条件语句]then程序语句fi要注意的地方是if后面有空格,条件语句两边有空格多写几次吧,写错了以后就记住了。再来一个elif,在java里是elseif,在shell里是elif比如说我们判断输入的内容:执行结果如下:case语句case语句的话,这里我们不直接给出格式了,直接上代码因为代码更容易看懂#!/bin/bashcase$1in1)echo"female";;2)echo"male";;*)echo"unknow";;esac一看代码就知道了吧,按模板去套就可以了。## for循环语句这个格式是怎么样子的呢?for((初始值;条件;变量控制语句))do循环体done比如我们输出一个三解形除了这种,还有forloopin1234doecho$loopdonewhile循环while循环的语法while[条件]do语句done#!/bin/bashtotal=0i=1while[$i-le100]dototal=$[$total+$i]i=$[$i+1]doneecho"totalis$total"执行结果读取控制台的输入read我们AOSP里,要选择编译的版本,这个时候,需要从控制台窗口中读取号码,然后才去进行编译。怎么样读取控制台的输入呢?read选项有:-t:等待时间,单位为秒-p:指定读取值时的提示符:eg:#!/bin/bashecho"pleaseinputtheversionyouwanttocompile:\n"echo"1.user-version\n2.engineer-version"read-p"yourselectedversionis:"versionif[$version-ne1-a$version-ne2]thenecho"versionnotright"elsecase$versionin1)echo"youselectedversionisuser-version";;2)echo"youselectedversionisengineer-version";;esacfiecho"yourinputis$version"函数函数的话我们主要分为两块,一部分是系统函数,另外一部分则是我们自己写的函数。常用的系统函数basename全路径名称,获取到文件的名字dirname全路径名称,获取除文件名以外的路径地址这两个在自动化编译的时候,关于路径的处理用得上自定义函数怎么样写自己的函数呢?之前在分析编译脚本的时候,就有lunch这个函数了,用于加载要编译的版本。定义函数:[function]函数名[()]{函数体}调用:函数名举例子#!/bin/bashfunctionsum(){total=0total=$[$1+$2]echo"totalis-->$total"}read-p"pleaseinputfirstnumber:"number1read-p"pleaseinputsecondnumber:"number2sum$number1$number2执行结果:学会以上这些内容,结合例子,多写代码,看懂是没问题的,要写出来,还得需要一些时间。

[文章] 一些关于面试的链接 已分享
史上最全的Android面试题集锦github分享的复习方向多贴SharedPreferences跨应用跨进程获取数据(附件)--(偶然面试遇到过现在估计没了推荐用腾讯新的工具mmkv)面试必备:Java
2023-02-16 10:24
·
面经
[问答] Android基础学习之RecycleView
今天在学习大锯老师的RecycleView基础课程时,ListViewAdapter中拿view时参数上下文的parent报错,这个问题怎么解决呢
2022-09-09 18:34
·
Android学习

[文章] java微服务开发(基础环境篇)
java微服务开发(基础环境篇)我们的目标是~~浩瀚的宇宙~~全栈开发俗话说的好工欲善其事必先利其器对于一个开发者来说一个好的开发环境可以带来的收益是巨大的本篇的重点主要是linux上一的一些环境的安装主要是
[问答] 安卓基础网络编程 :出现IllegalStateException该怎么解决?
学安卓基础课程网络编程这一块时经常出现IllegalStateException这个错误,今天学Retrofit的Get请求时又出现了,只要点击按钮,程序就会闪退+报错,我百度了许多方法,但还是实在没有办法解决
2020-12-28 15:21
·
Bug

[文章] 11、Android开发基础之Logcat的使用
Android开发基础之Logcat的使用logcat呢,我们在平时开发的时候,需要打出一些运行时的信息或者标记,用于测试或者说用于修改bug,以获取我们应用运行时的信息。

[文章] java基础概念
I.基础概念1.java语言特性面向对象(封装、继承、多态)跨平台(jvm实现平台无关性,writeonce,runeverywhere)网络编程并发编程多线程编译与解释并存(编译器将源码编译为字节码,
2021-11-21 11:41
·
java基础

[文章] 6、Android开发基础之常用的单位
Android开发基础之常用的单位上一篇文章我们学习了安卓其他布局(表格布局/绝对布局/帧布局)像素单位px像素单位不建议使用,除非是手表,或者机顶盒。
[问答] 在2020安卓自定义控件基础课程第34集,视频中没处理padding,加上后省略号不见了
在【阳光沙滩】2020安卓开发自定义控件基础课程,自定义控件基础课程第34集,处理padding引发的问题。
2020-09-02 02:31
·
Android

[文章] 零基础—iOS版“淘宝联盟”开发计划(一)
我会怎么简单怎么来,适合零iOS开发基础的童鞋,废话不多说,我们进入正题)0.0(-(零)开始之前,如何新建一个xcode项目:这步主要是给完全不会的小白童鞋介绍一下怎么创建Xcode项目,不需要的童鞋可以直接跳过这步

[文章] 19、Android开发基础之数据库的开发
Android开发基础之数据库的开发前面的视频,我们已经学习了数据的持久化存储,包括SP,包括在SD卡上存储,已经应用内部的存储是吧!其实数据库存储数据也是内部存储!

[文章] Linux基础学习2
写在前面本文紧接上文:Linux基础学习1声明:本人允许任何形式的转载(虽然不一定有人会转)Linux文件目录命令显示当前shellCWD(currentworkdirectory当前工作目录)的绝对路径

[文章] 9、Android开发基础之计算器点击效果的实现
Android开发基础之计算器点击效果的实现我们发现,原来的计算器点击的时候,颜色会变,这是怎么做出来的呢?

[文章] Linux基础的学习
Tips:这里学习的都是最基础的内容,没有涉及到复杂的内容。本文主要基于Centos6和7,Ubuntu可能略有不同。命令的基本格式基本格式如下:COMMAND[OPTIONS..]
[问答] 安卓开发工作必备技能?
大佬们,找到安卓开发工作需要掌握什么知识,后面想转车载或者系统层。
2024-04-07 10:43
·
找工作

[文章] 14、Android开发基础之通过系统提供的方法获取到保存文件的路径
Android开发基础之通过系统提供的方法获取到保存文件的路径我们在之前的代码保存文件的路径直接是用写文件的路径:/data/data/com.sunofbeaches.qqlogindemo/files
- 1
- 2
- 3
- 4
- 5
- 6
- 9
Copyright © 阳光沙滩V1.0.3(2014-) 本网站由程序猿(媛)用爱驱动