android studio使用-最简单的apk_activi_main.xml是什么文件-程序员宅基地

技术标签: android开发  

 

 

AS的版本

AS版本

对应下载包

备注

3.0

android-studio-ide-171.4408382-mac.dmg

最稳定的版本,正式版

3.1

android-studio-ide-173.4670197-mac.dmg

比较稳定,正式版

3.2

android-studio-ide-181.5014246-mac.dmg

比较稳定,正式版

3.4

android-studio-ide-183.5452501-mac.dmg

正式版

Android应用结构分析

使用AS开发android十分简单,除了创建Android项目,开发者只需要使用

activity_main.xml文件定义用户界面

MainActivity.java源代码编写业务实现。

工程文件结构

首先是Project,这个显示的就是工程目录下的所有文件。

image.png

app文件结构

app目录是典型的Gradle项目,需要开发的内容都在这里面实现。

build.gradle是该项目的构建文件,注意,有项目的build.gradle和应用的build.gradle。添加依赖的时候避免出错

build目录是该项目的构建结果,注意,有项目的build和应用的build。注意创建

libs目录存放该项目所依赖的第三方库

src是项目的开发重点,源代码和资源都在该目录下。(截图省略了res资源的内容)

 

app的重要目录及文件

  • build.gradle

所有android项目构架都需要改插件。除非你自己去完成构建工作。

apply plugin: 'com.android.application'

接下来的是android的定义全局属性:

android {
    //解决release编译时app:lintVitalRelease错误添加
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
    //编译sdk版本,compileSdkVersion不低于targetSdkVersion
    compileSdkVersion 28
    //编译工具版本,一般高版本的编译工具编译较低版本的编译sdk
    buildToolsVersion "29.0.2"
    //默认配合
    defaultConfig {
        //应用id
        applicationId "com.example.myapplication202001152138"
        //SDK最低版本
        minSdkVersion 27
        //目标SDK版本
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        //测试监控器
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

构建所需的依赖

dependencies {
    //定义项目主源码的依赖
    //下面配置依赖libs库目录下的所有jar包
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //android编译sdk的版本与android的全局配置一致。
    //'com.android.support:appcompat-v7:*.1.0',不高于compileSdkVersion
    implementation 'com.android.support:appcompat-v7:28.0.0'
    //下面配置从中央仓库下载依赖jar包,该包对应com.android.support.constraint库
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
   //定义androidTest下的代码依赖
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

 

  • main

main目录下有java目录和res目录,AndroidManifest.xml

  1. jav目录保存java文件,res保存android的各种资源文件。其中:

    layout子目录:存放界面布局文件
    values目录:存放xml资源文件,比如字符串:string,颜色:color,尺寸:dimens等
    drawable目录:定义了Drawable资源,对应drawable-ldpi,drawable-mdpi等
    mipmap目录:as3.0出现的内容,现在该目录定义分辨率,drawable定义背景灯 

  1. AndroidManifest.xml

android项目的系统清单文件。用来控制应用名称,图标,访问权限等整体属性。

而且android应用的四大组件:Activity,SErvice,ContentProvider,BroadcastReceiver都在其中配置。

  1. R.java文件

/Users/lounious/Documents/android_iot_data/MyApplication202001152138/app/build/generated/not_namespaced_r_class_sources/debug/processDebugResources/r/android/support/下一系列文件夹下都有。

暂不接触。

  • main次级目录res>values

android约定,将不同的资源放在不同的文件夹内,这样可以方便的使用aapt工具来扫描这些资源,并为他们声称对应的R.java文件。

常量文件string.xml

如下定义了两个字符串常量,这样在整个app中就可以使用语法@string/app_name,@string/click使用。

<resources>
    <string name="app_name">My Application202001152138</string>
    <string name="click">单击我</string>
</resources>


另外一种是分配组件标识符

通过在文件中这种定义方式,后面就可以在Java文件中调用activity的findviewbyid()方式来获取

在xml文件中则可以使用@id/<标识符代号>,即去掉+

android:id="@+id/show"

 

AndroidManifest.xml

文件清单信息:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    //包分发方式
    xmlns:dist="http://schemas.android.com/apk/distribution"
    //工具包
    xmlns:tools="http://schemas.android.com/tools"
    //包名称
    package="com.example.myapplication202001152138">

    <dist:module dist:instant="true" />
    //支持各种类型的屏幕
    <supports-screens
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:anyDensity="true"/>
    //应用程序的图标,标签主题等
    <application

        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        //定义组件activity
        <activity android:name=".MainActivity">
            <intent-filter>
            //定义activity的入口
                <action android:name="android.intent.action.MAIN" />
            //加载该应用时的activity
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

AS开发环境踩坑

第一坑:gradle无法打开自己的zip包

https://www.cnblogs.com/maydear/p/6849745.html

创建Basic activity后,报错,gradle无法打开自己的zip包。

image.png

第二坑:需手动下载对应的SDK版本

默认新project不自动安装工程对应的android SDK,或者不自动匹配,安装。

AS默认安装最新的android SDK,但是一般在开发时要安装自己对应版本android SDK

打开偏好选项,安装对于你的SDK版本。

image.png

image.png

 

第三坑-project structure,无法使用preview功能(“所见即所得”设计界面)

新版默认buildToolsVersion是使用本地最新版本。但最新版本可能低于选择的SDK API版本,需手动设置较低的compileSdkVersion版本。否则可能导致xml文件全部报错,preview打不开。

File-project structur-Modules,重新配置后会自动同步。

image.png

直接现象是activiyt_main.xml打开全是红色告警,右侧的preview打不开页面。

image.png

CompileSdkVersion与buildeToolVersion区别

1、CompileSdkVersion是你SDK的版本号,也就是API Level,例如API-19、API-20、API-21等等。

2、buildeToolVersion是你构建工具的版本,其中包括了打包工具aapt、dx等等。

这个版本号一般是API-LEVEL.0.0。 例如I/O2014大会上发布了API20对应的build-tool的版本就是20.0.0

3、可以用高版本的build-tool去构建一个低版本的sdk工程,例如build-tool的版本为20,去构建一个sdk版本为18的,反之则不行。

 

第四坑Android resource linking failed

报错信息:com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource linking failed

原因是gradle scripts--build.gradle(Module:app)中的报错:

image.png

 

compileSdkVersion 26  不低于 targetSdkVersion 26

implementation 'com.android.support:appcompat-v7:26.1.0',不高于compileSdkVersion

………………
………………
compileSdkVersion 26
    defaultConfig {
    applicationId "com.example.myapplication201912111032"    
    minSdkVersion 26    
    targetSdkVersion 26
        ………………
        ………………
implementation 'com.android.support:appcompat-v7:26.1.0'

image.png

 

第五坑:创建工程后,界面显示问题

在完成empty activity和basic activity之后,初始的界面是android界面,需要改成我们常用的project结构。

初始显示的android界面:
image.png

修改后的工程(project)结构

image.png

第六坑:再次打开页面import的依赖全部不可用。

需要做下文件的同步,如下图。

另外是关闭offline work选项(保证依赖可以自动联网)

image.png

 

image.png

第七坑:第六坑之后,仍有部分库没有匹配依赖,

比如:import android.support.annotation.Nullable;

image.png

在build.gradle的项目依赖文件中加入依赖:

implementation 'androidx.annotation:annotation:1.1.0'

同上做Sync with File System。

其实第六坑和第七坑的问题是一样的。区别在于一个有添加了依赖没有同步,一个没添加依赖。

 

 

android构建,编译与运行

apk包路径

编译完成后在对应路径下能看到release或者debug包

release版本:/app-name/build/outputs/apk/release

debug版本:/app-name/build/outputs/apk/debug

编译

常常使用很久的代码,编译不过。代码更新后重新编译的时使用。清除chche并重启build

image.png

工程管理

设置编译变量,确保编译的包是debug/release

重新编译打包

重新编译工程前先清除。

image.png

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/louniuous/article/details/105817506

智能推荐

在jupyter notebook运行指定conda虚拟环境(附带sklearn安装教程)_新建的annaconda虚拟环境怎么用jupyter打开-程序员宅基地

文章浏览阅读2.3k次,点赞5次,收藏25次。在jupyter notebook运行指定conda虚拟环境(附带sklearn安装教程)_新建的annaconda虚拟环境怎么用jupyter打开

软件实施流程(八大阶段)——软件实施工程师_软件实施指导-程序员宅基地

文章浏览阅读3.8k次。软件实施工程师软件实施工程师的工作是软件产品服务主线的一个决定性环节,软件的成功离不开实施。主要负责工程实施: 包括常用操作系统、应用软件及公司所开发的软件安装、调试、维护,还有少部分硬件、网络的工作;负责现场培训: 现场软件应用培训;协助项目验收;负责需求的初步确认;把控项目进度;与客户沟通个性化需求;负责项目维护。软件产品。_软件实施指导

KlayGE 4.0中Deferred Rendering的改进(四):GI的神话-程序员宅基地

文章浏览阅读59次。转载请注明出处为KlayGE游戏引擎上一篇解决了透明物体的渲染问题;本文将挑战另一个实时渲染的神话,实时全局光照(GI)。实时全动态GI目前direct lighting在游戏中日趋成熟,比较前卫的游戏引擎已经不满足于diect lighting的效果了,逐渐开始尝试indirect lighting。早期的方法有通过离线渲染light map来实现静态场景、静态光源的GI。接着出现...

初识Git_git必须用网络吗-程序员宅基地

文章浏览阅读433次。Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。简言概括:Git就是分布式版本控制。_git必须用网络吗

搭建Vulhub靶场 【附图】_vulhub靶场搭建-程序员宅基地

文章浏览阅读2.1w次,点赞59次,收藏265次。目录0x01简单概述0x02安装环境1. kali设置2. 更新软件源中的所有软件列表3. 安装https协议及CA证书0x03安装步骤一、安装Docker1. 下载安装2. 查看Docker是否安装成功3. 查看docker基本信息二、安装vluhub1. 安装pip32. 安装Docker-Compose3. 查看docker-compose版本三、安装vulhub靶场1. 克隆下载2. 随便进入一个靶场环境目录3. 对靶场进行编译4. 运行此靶场5. 查看启动环境6. 通过浏览器访问7. 关闭此靶场环_vulhub靶场搭建

sensei鼠标测试软件,「硬核测试:游戏鼠标精准度」赛睿SENSEI 310-程序员宅基地

文章浏览阅读564次。原标题:「硬核测试:游戏鼠标精准度」赛睿SENSEI 310作为赛睿最热销游戏鼠标之一,310有SENSEI(对称)和RIVAL(右手)两个版本,均采用今天要测的TrueMove3引擎,是基于PMW3360打造的1:1真实追踪的引擎,虽然现在“1:1引擎”很多了,但TrueMove出来时这个概念还是很新颖的,尤其是提到了消除抖动,最大限度的保持理论和实际DPI的稳定性,那么到底是不是真的1:1呢,..._鼠标精确度检测软件

随便推点

Could NOT find HDF5 (missing: HDF5_LIBRARIES HDF5_INCLUDE_DIRS)问题解决笔记-程序员宅基地

文章浏览阅读1.5w次。问题描述:在安装HDF5时候,同样遇到了上次没有遇到的坑。提示出粗:cmake: 13 (message) Could NOT find HDF5 (missing: HDF5_LIBRARIES HDF5_INCLUDE_DIRS)可是按照上次的笔记没有问题啊ubuntu安装HDF5链接库。怎么又抽风找不到了。问题解决:声明变量地址,即可解决。export PA_could not find hdf5

2021-01-16_libmysql.dll在哪-程序员宅基地

文章浏览阅读248次。vs2017 连接mysql 8.0我的环境:vs2017 64bit + mysql 8.0 64 bit(完整版)1.把 libmysql.dll 复制到 xxx.vcxproj 的同级目录,libmysql.dll 在安装mysql安装目录下找,我的在C:\Program Files\MySQL\MySQL Server 8.0\lib文件夹里。放到这个位置:libmysql.lib 拷贝到 与xxx.sln 同级目录的 自己新建的lib文件夹下(工程文件夹的其他位置均可,加载的时候对应好_libmysql.dll在哪

YT88 USB 加密狗 使用方法(一)加壳-程序员宅基地

文章浏览阅读2.3w次,点赞5次,收藏31次。资料下载地址: http://www.dgyzt.com/share.php?id=7到目录:YT88-11-6\外壳加密11(推荐)\外壳加密工具11.6.exe 运行 “外壳加密工具11.6.exe” 其 对应的说明文件为:YT88-11-6\外壳加密11(推荐)\使用说明\使用说明.txtStep1:点击保护Step2:点击 添加密钥Step3:输入..._yt88

Power BI DAX 分组排名 分层排名_powerbi分组排名-程序员宅基地

文章浏览阅读2.2k次,点赞5次,收藏2次。这个DAX公式采取类似Excel行上下文的功能,首先建立一个参数等于类别,在Rankx函数第一个参数添加一个Filter,实现同一类别内进行排名,即分层排名。上述DAX公式使用的是ALLEXCEPT函数,是ALL家族函数,功能是除了第二个参数【类别】都是行上下文计算排名,这样就实现了分组分层排名。如上例,Rankx只有前两个参数是必要的,实际可以输入五个参数,设置排序方式。通过在第一个参数添加函数可以实现进阶功能,例如分组分层排名,依旧使用上述数据。再使用Rankx计算排名。首先建立销售和度量值。_powerbi分组排名

快速访问中的ftp文件夹右键没有选项,无法删除如何解决-程序员宅基地

文章浏览阅读894次。随便在以一个目录里新建一个快捷方式,填上ftp地址,如下:下一步,然后删除此快捷方式,那废的ftp就没了转载于:https://www.cnblogs.com/shuangfeike/p/11413734.html..._群辉的ftp文件点右键没有编辑功能

mybatis根据数组批量查询_前端传入的是long型的数组后端在mybatis中怎么批量查询-程序员宅基地

文章浏览阅读1.8k次。接口/** * 从页面接收的数据是多值数据,就是一个数组,它不想转成其它类型,直接把数组丢给dao */ public List<Emp> queryByArray(Integer[] empnos);EmpMapper.xml配置文件<select id="queryByArray" resultType="emp"> select <incl..._前端传入的是long型的数组后端在mybatis中怎么批量查询