发布于2022年11月4日3年前 Android 入门 Gradle 安装配置 Linux下安装gradle 构建文件和创建任务 默认构建文件为 build.gradle, 构建是可使用 -b 替代 --build gradle -b <fileName> .gradle 文件夹存放的是 Gradle 的构建信息 Gradle 采用领域对象模型,每个Project 维护一个TaskContain 类的task 属性,Taskl代表需要执行的任务,允许指定依赖的任务、任务类型,可通过configure()方法配置任务,提供了doFirst()、doLast() 方法来添加Action,Action 和Closure对象都可代表Closure对象都可以是Action。 为Gradle构建文件创建Task的常用方法 调用 project.task() 调用 TaskContainer.crate() 无论使用哪种方式创建Task,通常都可为 Task指定以下3种属性: dependsOn:指定Task所依赖的其它Task type:指定该Task的类型 通过传入的代码块参数配置 Gradle构建过程 配置阶段 按依赖关系执行指定Task Gradle编译过程 //应用名为java的插件,主要是为了引入JavaCompile、JavaExec两个任务 apply plugin: 'java' task compile(type:javaCompile){ source = filetree('src/main/java') classpath = sourceSets.main.compileClassPath destinationDir = file('build/classes/main') options.fork = true options.incremental = true } //指定任务类型为JavaExec task run(type:JavaExec,dependsOn:'compile'){ classPath = sourceSets.main.runtimeClassPath //指定主类为lee.HelloWorld main = 'lee.HelloWorld' } 编译运行 gradle run Gradle的属性定义 1. 为属性指定属性值 //为Project内置属性指定属性值 version = 1.0.0 task showProps{ description = 'task' } Project 常用的属性 name:项目名称 path:项目绝对路径 description:项目描述路径 buildDir:项目的构建结果的存放路径 version: 项目版本号 2. 通过 ext 添加属性 //使用ext方法传入代码来设置属性 ext{ prop1 = 'prop1' prop2 = 'prop2' } task showAddPros{ ext{ prop3 = 'prop3' prop4 = 'prop4' } } 3. 通过-P选项添加属性 gradle -P prop='prop-value' <task-name> 4. 通过JVM参数添加属性 gradle -D org.gradle.project.prop= 'prop-value' <task-name> 增量式构建 Gradle通过任务的输入、输出部分是否发生改变来判断该任务是否需要重新执行,Task使用TaskInputs类型inputs属性来代表输入,使用TaskOutputs类型outPuts属性来代表输出。 task fileContentCopy{ //定义代表source目录的文件集 def sourceTxt = fileTree("source") def dest = file('dest.txt') //定义任务的输入和输出 inputs.dir sourceTxt //指定输出目录为sourceTxt outputs.file dest //指定输出目录为dest } Gradle 插件机制 应用插件相当于引入了该插件包含的所有任务类型、任务、属性等,这样Gradle就可以执行插件种预定义的任务。 apply plugin: <plugin-name> #查看构建文件支持的所有任务 apply tasks --all 通过resource项目添加第三方或额外的依赖源码 //配置被依赖的源代码路径 sourceSets{ fkframework } Gradle自动为为每个新建的sourceSets创建相应的Task,包括compilexxxJava,processxxxResource和xxxClasses这三个Task。 //配置compileJava任务依赖compilexxxJava任务 compileJava.dependsOn compilexxxJava //将第三方项目字节码的存储路径添加到系统编译时、运行时的类路径中 sourceSets{ main{ compileClassPath = compileClassPath + files(xxx.output.classesDir) } test{ //将xxx生成的字节码文件的存储路径添加到运行时的类路径中 runtimeClassPath = runtimeClassPath + files(xxx.output.classDir) } } 依赖管理 Gradle 配置依赖步骤: 为Gradle配置仓库 //定义仓库 reposities{ //使用Maven默认的中央仓库 mavenCentral() //使用远程仓库 url "http://repo2.maven.org/maven2" //显示指定本地磁盘路径作为maven仓库url url "g:/abc" } 为不同组配置依赖的jar包 //使用configurations配置组 configrations{ //配置名为xxx的依赖组 xxx } dependencies { //配置依赖的jar包 //为xxx依赖组添加了commons-logging 1.2的jar包 xxx group: 'commons-logging',name:'commons-logging',version:'1.2' //简写 xxx 'commons-logging:commons-logging:1.2' } ADB 常用命令: #查看当前运行的模拟器 abd devices #电脑与手机之间文件的相互复制 abd push <file-path> <targer-path> #启动模拟器的shell窗口 adb shell #安装、卸载APK程序 adb install [-r] [-s] <file> #卸载APK程序 adb uninstatll [-k] <file> 开发Android应用 开发流程 创建项目 编写布局文件 编写java逻辑代码 项目结构 AndroidMainfest.xml 文件主要内容: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.topwisesz.helloworldapp"> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.HelloWorldApp" tools:targetApi="31"> <!--定义一个Android应用的一个组件--> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <!--制定该Activity是程序入口--> <action android:name="android.intent.action.MAIN" /> <!--制定运行时加载该应用时运行该Activity--> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> Android基本组件 常用组件:VIew、Activity、Service、BroadcastReceiver、ContentProvider、Intent、IntentFilter 四大组件:Activity、Service、BroadcastReceiver、ContentProvider View和Activity View是所有UI控件的基类,Activity用于显示View //创建一个线性布局管理器 LinearLayout linearLayout = new LinearLayout(this); //设置该Activity显示线性布局 setContentView(linearLayout); //设置该Activity显示在main.xml定义的view setContentView(R.layout.main); BroadcastReceiver BroadcastReceiver类似于一个全局监听器,用于接受广播消息 使用BroadcastReceiver接受消息步骤: 继承BroadcastReceiver重写OnReceive()方法 public class DefineBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { System.out.println("接受消息"); } } 发送广播消息 sendBroadcast(); sendstickBroadcast(); sendOrderedcast(); 通过Intentfilter配置BroadcastReceiver需接受的消息 注册BroadcastReceiver 通过代码Context.registReceiver()方法注册BroadcastReciver 在AndroidMainfest.xml文件中使用<receiver.../>元素完成注册 ContentProvider ContentProvider 可以实现不同应用之间的数据交换 //插入数据 insert(url,contentValues) //删除指定数据 delete(url,contentValues) //更新指定数据 update(url,contentValues,String,String[]) //查询数据 query(url,String[],String,String[],String) Intent和IntentFilter Intent作为Android应用内不同之间通信的载体,Activity、Service、BroadcastReceiver三种组件都是以Intent作为通信主题; //启动Activity context.startActivity(Intent intent); context.startActivityForResult(Intent intent, int requestCode); //启动Service context.startService(Intent intent); bindService(Intent service,ServiceConnection conn,int flags); //启动BroadcastReceiver sendBroadcast(Intent intent); sendStickyBroadcast(Intent intent); 显式Intent:明确指定需要启动或触发的组件应满足的类名 隐式Intent:只是指定需要启动或触发的组件应满足的条件 IntentFilter用于声明Intent所满足的条件。
创建帐户或登录后发表意见