APP-开发01-基础知识
日期:Feb-28-2022
作者:狐狸大剑眼镜
书籍:《第一行代码 Android第二版》陈建林
android+studio开发实战:从零基础到App上线 欧阳燊,念shēn
经过这段时间的学习,发现不会开发真的不行嗄,实习这段时间接触的都是android方面的内容,师傅也是这方面专业的,网安周六周末有空学。目前的学习计划主要是frida逆向抓包,爬虫。还行(o゜……゜)o
项目结构了解
首先来看AndroidManifest.xml
所有的活动都要在这个文件注册,没有注册时不能使用的,重点来看一下activity标签里的内容,其中intent-filter内的两行代码非常重要,代表是这个应用的主要活动。
所以我们来看看MainActivity.Java写的是什么。一个公共类MainActivity extends(继承)AppCompatActivity,这是向下兼容的Activity,增加的特性和功能最低兼容到android 2.1,项目中所有的活动必须继承它或者的的子系统才能拥有活动的特性(AppCompatActivity是Activity的子类)
接着往下看,定义了一个onCreate方法,在里面还调用了setContentView()方法,引用了layout布局。
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
选择红框内容窗口或代码分屏或者单独显示
我淦了,点击编译报2Failed to find Build Tools revision 30.0.3,Build Tools版本有问题,电脑的为32
点击红框,安装需要的版本
https://stackoverflow.com/questions/63718190/failed-to-find-build-tools-revision-30-0-1
res中draw开头的放的是图片资源,layout放布局,mipmap放图标,values放字符串,颜色,样式等配置。
打开res/values/string.xml文件
My Application
引用它的两种方式
R.string.hello_world
@string/hello_world
看一下app目录下build.gradle
plugins {
id 'com.android.application' #表示这是一个应用程序模块,还有一个com.android.library表示库模块。
}
android {
compileSdk 32 #表示项目的编译版本
defaultConfig {
applicationId "com.example.myapplication" #包名可以在这修改
minSdk 21
targetSdk 32 #23或者更高引入运行权限
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false #是否混淆
# proguardFiles用户指定混淆时使用的规则文件 proguard-android-optimize.txt是android SDK目录下的,proguard-rules.pro是当前项目根目录下的。
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
# dependencies指定依赖关系
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
Log日志
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("MainActivity","hollowed!");
}
Log.d()方法中传入了两个参数:第一个参数是tag,一般传人当前的类名就好,主要用于对打印信息进行过滤;第二个参数是msg,即想要打印的具体的内容。
运行之后再logcat就能看日志信息。
不要使用System.out啦??
快捷输入,在Android Studio当中也是有的,比如你想打印一条debug级别的日志,那么只需要输入logd,然后按下Tab键,就会帮你自动补全一条完整的打印语句。输人logi,然后按下Tab键,会自动补全一条info级别的打印日志。输入logw,按下Tab键,会自动补全一条warm级别的打印日志,以此类推。另外,由于Log的所有打印方法都要求传人一个tag参数,每次写一遍显然太过麻烦。这里还有一个小技巧,我们在onCreate()方法的外面输人logt,然后按下Tb键,这时就会以当前的类名作为值自动生成一个TAG常量