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常量