Android(三)原生开发基本知识

本文介绍了Android原生开发的基本知识,包括Android Studio的使用、项目配置、Activity的创建、资源管理和引用、页面跳转与回调,以及Activity、Fragment、View的关系和监听事件。文章详细阐述了R.java文件的作用,资源的分类和引用方式,以及如何进行页面间的通信和管理页面生命周期。
摘要由CSDN通过智能技术生成

一、基本认识

1、目的:实现业务逻辑,生成可用apk

2、打开Android Studio(环境搭建目录结构讲解),新建一个项目,选择项目类型,一般可选的有:

新建项目类型
这里的Activity就相当于MVC中的controller,跳转到Activity后,Activity会加载布局文件layout进来并渲染,最后展示在屏幕上,所以新建项目会提供一些Activity模板供选择。

  • 其中有个Empty Activity,也就是新建一个空的Activity,但是不创建对应的layout文件,所以页面是空白的。
  • Login Activity,会创建对应的登录逻辑代码,并且配置一个登陆页面的layout,实现了登录页面和登录逻辑的基本功能。
  • 其他Activity同理。

这里我选择了No Activity,也就是只是一个项目,但是没有任何的Activity页面,全部自己创建。
我选择的Min API是23,安卓sdk有对应版本的,安卓6就是对应API-23,安卓10对应API-29,我这里支持最小安卓6(API-23)版本,但是我的项目的编译目标版本是API-29。

同时,我不勾选use legacy android support library,意思就是我不需要使用到android support library这个类库的支持,

这么说吧,安卓6版本自带了API-23的所有类库,就跟jdk一样的原理,但是如果需要使用API-23外的其他类,则需要引入对应的类库,比如android support library是额外的支持库,support-v4和appcompat-v7就是android support library的其中两个版本,
但是安卓后来把这些额外类库统一调整并命名到androidx这个包路径下,作为一个第三方标准类库供引入来开发,需要编译版本达到API-28才能使用(最低版本不需要达到),由于这是趋势,所以最好使用。


3、先借助一个写好的项目说明下项目各个配置是怎样的:

比如项目结构截图如下:
项目根目录结构

  • 先说图中的1,settings.gradle文件,指定项目名称,include ':app'好像表示会打包成一个app而不是一个依赖库,依赖库就是给其他项目引用的。
rootProject.name='项目名称'
include ':app'
  • 图中2,gradle.properties文件,配置运行环境参数比如最大堆内存等。android.useAndroidX=trueandroid.enableJetifier=true表示自动使用androidx依赖库,如果使用到对应的类会自动引入androidx依赖包
org.gradle.jvmargs=-Xmx1536m

# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
android.useAndroidX=true

# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true

  • 图中3,External Libraries,下面是当前项目的所有引用,可以从这里看到所有依赖jar。
  • 图中4,build.gradle文件,在项目的根目录下,如下,是关于从哪里下载依赖,以及一些项目级别的配置:

buildscript {
    repositories {
        google()
        jcenter()
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

  • 图中的gradlebuild.idea.gradle文件夹,这些是idea以及外部环境如何定义当前项目,一般跟项目代码无关,可以不关注。
  • 图中5,app,这个是项目核心目录,所有安卓app的配置、资源和源代码都是放在这个目录下的,我单独把这个目录拿出来。

app目录截图如下:
app目录截图

  • 图中1,build目录,这个目录是项目编译后放字节码文件,重新编译前可以直接删掉没事。
  • 图中2,libs目录,存放依赖的jar包,放在这个目录的jar会自动添加到依赖(加上依赖就行:implementation fileTree(dir: 'libs', include: ['*.jar'])
  • 图中3,releas目录,存放build->generate sign/ apk选项生成的apk文件。
  • 图中4,build.gradle文件,区别于项目根目录的同名那个文件,app下的这个是
    指定编译版本,运行最低版本,发布版本,以及所有dependencies,如下,把libs下所有jar关联,然后导入了很多androidx的依赖:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion '29.0.3'

    defaultConfig {
        applicationId "com.lwr.password"
        minSdkVersion 23
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.annotation:annotation:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.navigation:navigation-fragment:2.2.2'
    implementation 'androidx.navigation:navigation-ui:2.2.2'

    implementation 'com.github.bumptech.glide:glide:4.11.0' /*手势密码*/
    annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'/*手势密码*/
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

  • 图中5, src\main\java,这是源码目录,存放所有源码,也就是java类。
  • 图中6, src\main\res,资源目录,存放图片,样式,布局文件layout,等等。

  • 图中7,src\main\AndroidManifest.xml文件,相当于web.xml文件,
  1. package="com.lwr.password"配置app基础路径,作为其他相对路径的base。
  2. <uses-permission配置需要用到的权限,比如读写权限,安装apk时候可以看到,但是启动app时候具体权限还要一个个申请。
  3. <application android:name=".MyApplication"这里的MyApplication是我自定义的一个继承Application的类,在android:name配置之后这个类会在启动时被初始化。
  4. 然后是所有的Activity都要在此声明,否则不可跳转。其中选择一个Activity配置android.intent.category.LAUNCHERmain作为第一个看到的页面,如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.lwr.password">
    <!-- 读写权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:requestLegacyExternalStorage="true"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".ui.userupdate.RegisterActivity"></activity>
        <activity
            android:name=".activity.SplashActivity"
            android:theme="@style/TransparentTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.gesture.PwdGestureActivity"
            
  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 课程介绍Android开发所需要的比较全面的基础知识,原理。这样在随后的课程里或阅读开源的App时能读懂代码。2. 课时的编排使用Google官方的Android Developer CN的分类,删减了对jetpack(Androidx)的相关课题。因为jetpack并不是核心库,国内大部分App都不会使用它。3. 使用Java作为项目例子代码,要学习Android开发,首先得会Java语言,因为Android API的核心代码是用Java编写的,也可以使用Koltin语言,但是当阅读Android源码时会Java语言是绕不过去的。Java代码可以通过Android Studio的菜单 Code - Convert Java File To Kotlin File来转换为Koltin. 4. 主要介绍Android的核心组件,类库. 但是不会详细介绍jetpack的库,因为这个库使用koltin,而且对AS有强依赖,比如升级了AS不得不升级jetpack(androidx)。或者对于低版本的androidx,新版AS干脆不支持;还有就是依赖GMS核心的都不准备讲,只介绍开源的第方项目,可以发布到华为,小米等国内Android系统的类库。5. 这里只是介绍Android原生开发,不介绍Flutter,React Native,Hipppy等跨平台框架。选择原生框架的好处就是可以使用系统平台最新的特性,最高的性能,最少的学习成本。当然这些跨平台框架访问系统的一些独有功能还是得通过桥接原生框架调用。Flutter得要学会Dart,Java语言,并且学会它的框架体系API. React Native和Hippy这些H5框架通过JavaScript访问原生功能的框架也得学会JavaScript,还要会Vue,React框架,之后就是Html,Css布局。 这些还需要下载安装开发额外的开发环境。当然它的好处是跨Android,iOS两个平台。童鞋根据自己的项目要求进行取舍。
Android原生开发是指使用Android SDK提供的工具和API,使用Java或Kotlin编写应用程序的开发方式。与使用跨平台框架如React Native或Flutter进行开发不同,原生开发可以充分利用Android设备的特性和功能,提供更好的性能和用户体验。 Android原生开发的优势在于可以直接调用系统提供的各种功能与服务,如摄像头、传感器、定位、通知等,使得应用程序能够更好地与硬件进行交互。此外,Android原生开发可以充分利用Android SDK中提供的广泛的API,包括UI组件、多媒体、网络、数据库等,以及许多第方库和插件,使得开发过程更加灵活和高效。 Android原生开发的另一个重要特点是可以适应不同的设备和屏幕尺寸,通过适配不同的布局、样式和分辨率,使得应用程序在各种设备上都能够良好地运行和展示。此外,原生开发还可以充分利用设备的性能和资源,提供更好的响应速度和流畅度。 然而,Android原生开发也存在一些挑战。首先,与使用跨平台框架相比,原生开发需要更多的学习和了解Android系统和API的知识,对开发者的技术要求较高。其次,对于需要在多个平台上开发的应用程序来说,原生开发需要分别开发和维护各个平台的代码,增加了开发的复杂性和工作量。最后,由于Android系统的不断更新和改进,原生开发需要及时跟进和适应新的API和特性,对开发者来说可能需要持续的学习和更新。 总之,尽管Android原生开发需要具备一定的技术功底和对Android系统的了解,但它可以充分利用Android设备的特性和功能,提供更好的性能和用户体验,适应不同的设备和屏幕尺寸。对于注重性能和用户体验的应用程序来说,原生开发是一种值得选择的开发方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值