学习unity android sdk 基本


Android Sdk 接入学习
三种Build System
Internal(Default):Unity内置,仅需Android SDK支持。不能导出工程,适用于仅适用Unity开发的工程。
Gradle(New):使用Gradle进行构建,需要Android SDK与Gradle支持。可以导出Android Studio工程,选这个才能勾选下面的Export Project,适用于Unity与Android交互的项目。
ADT(Legacy):使用ADT进行构建,需要Android SDK与ADT支持。可以导出Eclipse项目,现逐渐被弃用(Unity2017.3中已经没该选项了)。

Development Build : 调试,打出来的apk包在摇晃之后默认有log。
在Player Setting中修改:Company Name,Product Name,Other Settings中的Identification中的Bundle Identifier

Android Studio与eclipse的区别 https://blog.csdn.net/hebbely/article/details/51967766
ADT插件:Android Development Tools 安卓开发工具。
IntelliJ IDEA:IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具之一。
Eclipse开发工具可以做很多不同的开发,添加ADT插件之后就能开发android程序了。
AndroidStudio只面向手机开发,是一项全新的基于IntelliJ IDEA的Android开发环境。。
Android Studio与eclipse的区别总结:Android Studio在界面,打印,智能提示,调试等各方面都是更优秀的。eclipse创建管理项目比android studio更简单,项目大小比android studio更小,所以许多程序员选择了从Eclipse中创建项目后导入到AndroidStudio中。。

使用android studio创建android项目:
文章1:https://www.cnblogs.com/dongdong230/p/4184097.html
首先,先指出Android Studio中的两个概念。 Project 和 Module 。在Android Studio中, Project 的真实含义是工作空间, Module 为一个具体的项目。在Android Studio中,我们可以同时对多个Android Studio的 Module 进行同时编辑,这些 Module 在同一个 Project 之中。你创建项目的同时, Project 自动创建了,因此很多人容易混淆这两种概念。
Eclipse 的 Project 等同于Android Studio的 Module 。Eclipse 的 workspace 等同于Android Studio的 Project 。
Android Studio创建项目的过程,其实就是 Eclipse 创建项目过程的细分化。 Eclipse 许多在一个页面设置的内容,Android Studio拆分成了多个页面,因此,创建项目的过程其实并不复杂。
创建android项目中的某些选项:
include android instant app support 是什么?在app里给你的朋友发了一个链接,然后你的朋友点击链接就可以看到该链接的内容,而不需要转到该链接,或者下载查看该链接所需要的的app。https://blog.csdn.net/hadues/article/details/80637483
创建项目之后,你会发现左侧的项目文件区域显示的文件层级,和 Eclipse 是不相同的,甚至和本地目录的文件层级也是不相同的。
和 Eclipse 不相同是因为Android Studio使用了 Gradle 这个项目构建工具,而 Eclipse 使用 Ant 构建项目,你可以通过 Gradle 设置和 Eclipse 拥有相同的目录结构。,官方推荐使用 Android 文件目录显示结构,你可以切换。在项目文件区域的左上角,你可以选择你想选择的文件结构显示类型。另外,在项目文件区域的右上角,有一个齿轮的设置按钮,点击可以更加细节的设置文件显示效果。
Gradle 只是项目构建工具, Eclipse 中也是可以使用的。
如果你已经有一个项目,你想在这个项目中创建一个 Module ,你可以选择 File --> New Module。可以导入各自类型的工程,包。

创建项目:
创建好一个项目之后,发现preview试图根本没有,只有一个theme preview,但是是灰色的,不可点击。点击build,make project。会看到一些错误。原因是刚开始的工程需要下载一些东西。项目执行会报错,点击出错了的模块的名字,右边会有一串英文,让你安装相应的东西。如果还有错误,转到相应的错误的位置,如果是需要下载的话,会在当前报错的代码的文件的上方显示是否下载相应的东西。注意观察右下角的提升,可能是需要更新某些东西,比如sdk。在tools,sdkmanager中下载需要的sdk版本。
有一个错误无法解决。。。
https://blog.csdn.net/friendan/article/details/8083673 添加环境变量的方法
环境变量也加了,还是一直报这个错误。。。
I had Execution failed for task ':app:generateDebugBuildConfig'. error, cleaning and rebuilding project was not working.
I added C:\Users\...\AppData\Local\Android\sdk\tools to my PATH Environment variable.
I closed android studio and vscode that I was using for edit project files. (This is very important)
I run the project and it worked fine.
打开build.gradle这个文件,选择的修改了defaultConfig里的targetSdkVersion为16,也就是android4.1,因为我本身的创建的工程就是android4.1的,还是没好。。。。。。于是我重新创建了新的项目,这次不加add no activity,编译通过,一切正常,就是不能run,因为没有default activity,我又重新创建了一个项目,选择base activity布局,编译通过,run通过。。。。看起来好像没有问题,但是我还是没有preview选项,theme preview也一样是灰色的。因为之前有搜索过preview相应的问题,因为之前编译没有通过,所以app->src->main->res(资源)->layout(布局)文件没有生成,现在编译通过了,就有了,所以我猜测,新版的android studio已经没有preview这个东西了,而theme preview应该某些特殊条件就可以选择。问题应该是解决了,只是不知道为什么选择其他的布局就无法通过编译。。。。。。之前选择的是empty activity和fullscreen activity,最后再试一下bottom navigation activity,编译通过,一切正常。。。。最后还是忍不住又试了empty activity和 fullscreen activity,都是好的,发现和targetSdkVersion完全没有关系,原来是我创建activity时勾选了向后兼容,去掉勾选就好了,我猜应该是我只下载了android4.0之后的版本,之前的版本没有下载,所以报错,把所有的sdk版本都下好,即使勾选向后兼容也可以了。

Android Studio工程目录结构:https://blog.csdn.net/xhbxhbsq/article/details/54615663
1、.gradle和.idea
    这两个目录下放置的都是Android Studio自动生成的一些文件,我们无须关心,也不要去手动编辑。
2、gradle
    这个目录下包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle。Android Studio默认没有启动gradle wrapper的方式,如果需要打开,可以点击Android Studio导航栏 --> File --> Settings --> Build,Execution,Deployment--> Gradle,进行配置更改。
3、app
    项目中的代码、资源等内容几乎都是放置在这个目录下的,我们后面的开发工作也基本都是在这个目录下进行的。
4、build,不是app文件夹下的,但我的项目里并没有看到这个文件夹。
    这个目录你也不需要过多关心,它主要包含了一些在编译时自动生成的文件。
5、.gitignore
    这个文件是用来将指定的目录或文件排除在版本控制之外的。
6、build.gradle
    这是项目全局的gradle构建脚本,通常这个文件中的内容是不需要修改的。
7、gradle.properties
    这个文件是全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本。
8、gradlew和gradlew.bat
    这两个文件是用来在命令行界面中执行gradle命令的,其中gradlew是在Linux或Mac系统中使用的,gradlew.bat是在Windows系统中使用的。
9、工程名.iml
    iml文件是所有IntelliJ IDEA项目都会自动生成的一个文件(Android Studio是基于IntelliJ IDEA开发的),用于标识这是一个IntelliJ IDEA项目,我们不需要修改这个文件中的任何内容。
10、local.properties
    这个文件用于指定本机中的Android SDK路径,通常内容都是自动生成的,我们并不需要修改。除非你本机中的Android SDK位置发生了变化,那么就将这个文件中的路径改成新的位置即可。
11、settings.gradle
    这个文件用于指定项目中所有引入的模块。由于HelloWorld项目中就只有一个app模块,因此该文件中也就只引入了app这一个模块。通常情况下模块的引入都是自动完成的,需要我们手动去修改这个文件的场景可能比较少。
app目录结构:
1、build
    这个目录和外层的build目录类似,主要也是包含了一些在编译时自动生成的文件,不过它里面的内容会更多更杂,我们不需要过多关系。
2、libs
    如果你的项目中使用到了第三方jar包,就需要把这些jar包都放在libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去。
3、src下的AndroidTest
    此处是用来编写Android Test测试用例的,可以对项目进行一些自动化测试。
4、src,main下的java
    毫无疑问,java目录是放置我们所有java代码的地方,展开该目录,你将看到我们刚才创建的HelloWorldActivity文件就在里面。
5、src,main下的res
   这个目录下的内容就有点多了。简单点说,就是你在项目中使用到的所有图片,布局,字符串等资源都要存放在这个目录下。当然这个目录下还有很多子目录,图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下,以mipmap开头的文件夹都是用来放应用图标的,所以你不用担心会把整个res目录弄得乱糟糟的。
6、src,main下的AndroidManifest.xml
    这是你整个Android项目的配置文件,你在程序中定义的所以四大组件都需要在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明。
7、test
    此处是用来编写Unit Test测试用例的,是对项目进行自动化测试的另一种方式。
8、.gitignore
    这个文件用于将app模块内的指定的目录或文件排除在版本控制之外,作用和外层的.gitignore文件类似。
9、app.iml
    IntelliJ IDEA项目自动生成的文件,我们不需要关心或修改这个文件中的内容。
10、build.gradle
    这是app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置。
11、proguard-rules.pro
    这个文件用于指定项目代码的混淆规则,当代码开发完成后打成安装包文件,如果不希望代码被别人破解,通常会将代码混淆,从而让破解者难以阅读。
当你再加入一个新的模块时,比如test123模块,则会生成一个test123文件夹与app文件夹同级,test123文件夹结构和app文件夹结构一模一样。

https://blog.csdn.net/xhbxhbsq/article/details/54863483 build.gradle讲解
AndroidStudio是采用Gradle来构建项目的。Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置。摒弃了传统基于XML(如Ant和Maven)的各种繁琐配置。
项目中有两个build.gradle文件,一个是在最外层目录下的,一个是在app(某个模块)目录下的。这两个文件对构建AndroidStudio项目都起到了至关重要的作用
最外层目录下的build.gradle:
// 根目录下的build.gradle用于添加子工程或模块共用的配置项。
classpath 'com.android.tools.build:gradle:3.2.0'// 定义classpath,gradle会从“repositories”中下载对应版本的Gradle。如果使用gradle wrapper的话,感觉这个配置会被忽略。Wrapper会自己去下载所使用的gradle版本。
allprojects // 该配置会被应用到所有的子工程。
jcenter : 是一个代码托管仓库,很多Android开源项目都会选择将代码托管到jcenter上,声明了这行配置之后,我们就可以在项目中轻松引用任何jcenter上的开源项目了。
dependencies闭包中使用classpath声明了一个Gradle插件。为什么要声明这个插件呢?因为Gradle并不是专门为构建Android项目而开发的,java,c++等很多项目都可以使用Gradle来构建。因此如果我们要想使用它来构建Android项目,则需要声明com.android.tools.build:gradle:2.2.2这个插件。其中,最后面的部分是插件的版本号。
app目录下的的build.gradle:
apply plugin: 'com.android.application':应用了一个插件,一般有两种值可选:com.android.application表示这是一个应用程序模块,com.android.library表示这是一个库模块。应用程序模块和库模块的最大区别在于,一个是可以直接运行的,一个只能作为代码库依附于别的应用程序模块来运行。
compileSdkVersion用于指定项目的编译版本,compileSdkVersion 28
buildToolsVersion 用于指定项目构建工具的版本
applicationId 用于指定项目的包名,前面我们在创建项目的时候其实已经指定过包名了,如果你想在后面对其进行修改,那么就是在这里修改的。
minSdkVersion 用于指定项目最低兼容的Android系统版本
targetSdkVersion 指定的值表示你在该目标版本上已经做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性。高于该版本的新功能将不会启用。
versionCode用于指定项目的版本号,versionName用于指定项目的版本名,这两个属性在生成安装文件的时候非常重要。
buildTypes闭包中用于指定生成安装文件的相关配置,通常只会有两个子闭包,一个是debug,一个是release。debug闭包用于指定生成测试版安装文件的配置,release闭包用于指定生成正式版安装文件的配置。另外,debug闭包是可以忽略不写的
minifyEnabled用于指定是否对项目的代码进行混淆,true 表示混淆,false 表示不混淆。
proguardFiles 用于指定混淆时使用的规则文件,这里指定了两个文件,第一个proguard-android.txt 是在Android SDK目录下的,里面是所有项目通用的混淆规则,第二个 proguard-rules.pro 是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则。需要注意的是,通过AndroidStudio直接运行项目生成的都是测试版安装文件。
通常AndroidStudio项目一共有3种依赖方式:本地依赖、库依赖和远程依赖。本地依赖可以对本地的jar包或目录添加依赖关系,库依赖可以对项目中的库模块添加依赖关系,远程依赖则可以对jcenter库上的开源项目添加依赖关系。
implementation fileTree(dir: 'libs', include: ['*.jar'])本地依赖声明:将libs目录下所有.jar后缀的文件都添加到项目的构建路径当中:
implementation 'com.android.support:appcompat-v7:28.0.0'标准的远程依赖库格式,其中com.android.support是域名部分,appcompat-v7是组名称,23.4.0是版本号。
至于库依赖声明这里没有用到,它的基本格式是compile project后面加上要依赖的库名称,比如说有一个库模块的名字叫helper,那么添加这个库的依赖关系只需要加入compile project(':helper')这句声明即可。

XML文件:
AndroidManifest.xml文件解析:https://www.cnblogs.com/pilang/archive/2011/04/20/2022932.html
AndroidManifest.xml:这个清单把应用程序的基本信息提交给Android系统,在应用程序的代码能够运行之前,这个信息系统必须建立。位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)
1、第一层(<Manifest>):(属性)
xmlns:android:定义android命名空间,一般为http://schemas.android.com/apk/res/android,这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。
package:指定本应用内java主程序包的包名,它也是一个应用进程的默认名称。
sharedUserId:表明数据权限,因为默认情况下,Android给每个APK分配一个唯一的UserID,所以是默认禁止不同APK访问共享数据的。若要共享数据,第一可以采用Share Preference方法,第二种就可以采用sharedUserId了,将不同APK的sharedUserId都设为一样,则这些APK之间就可以互相共享数据了。
sharedUserLabel:一个共享的用户名,它只有在设置了sharedUserId属性的前提下才会有意义
versionCode:是给设备程序识别版本(升级)用的必须是一个interger值代表app更新过多少次,比如第一版一般为1,之后若要更新版本就设置为2,3等等。。。
versionName:这个名称是给用户看的,你可以将你的APP版本号设置为1.1版,后续更新版本设置为1.2、2.0版本等
installLocation:安装参数,是Android2.2中的一个新特性,installLocation有三个值可以选择:internalOnly、auto、preferExternal。选择preferExternal,系统会优先考虑将APK安装到SD卡上(当然最终用户可以选择为内部ROM存储上,如果SD存储已满,也会安装到内部存储上),选择auto,系统将会根据存储空间自己去适应,选择internalOnly是指必须安装到内部才能运行
2、第二层(<Application>):属性
一个AndroidManifest.xml中必须含有一个Application标签,这个标签声明了每一个应用程序的组件及其属性(如icon,label,permission等)
android:allowClearUserData('true' or 'false'):用户是否能选择自行清除数据,默认为true,程序管理器包含一个选择允许用户清除数据。当为true时,用户可自己清理用户数据。
android:allowTaskReparenting('true' or 'false'):是否允许activity更换从属的任务,比如从短信息任务切换到浏览器任务。
android:backupAgent:这也是Android2.2中的一个新特性,设置该APP的备份,属性值应该是一个完整的类名,如com.project.TestCase,此属性并没有默认值,并且类名必须得指定(就是个备份工具,将数据备份到云端的操作)
android:debuggable:这个从字面上就可以看出是什么作用的,当设置为true时,表明该APP在手机上可以被调试。默认为false。
android:description/android:label:此两个属性都是为许可提供的,均为字符串资源,当用户去看许可列表(android:label)或者某个许可的详细信息(android:description)时,这些字符串资源就可以显示给用户。label应当尽量简短,之需要告知用户该许可是在保护什么功能就行。而description可以用于具体描述获取该许可的程序可以做哪些事情,实际上让用户可以知道如果他们同意程序获取该权限的话,该程序可以做什么。我们通常用两句话来描述许可,第一句描述该许可,第二句警告用户如果批准该权限会可能有什么不好的事情发生。
android:enabled:Android系统是否能够实例化该应用程序的组件,如果为true,每个组件的enabled属性决定那个组件是否可以被 enabled。如果为false,它覆盖组件指定的值;所有组件都是disabled。
android:hasCode('true' or 'false'):表示此APP是否包含任何的代码,默认为true,若为false,则系统在运行组件时,不会去尝试加载任何的APP代码,一个应用程序自身不会含有任何的代码,除非内置组件类,比如Activity类,此类使用了AliasActivity类,当然这是个罕见的现象
android:icon:这个很简单,就是声明整个APP的图标,图片一般都放在drawable文件夹下
android:permission:设置许可名,这个属性若在<application>上定义的话,是一个给应用程序的所有组件设置许可的便捷方式,当然它是被各组件设置的许可名所覆盖的。
android:presistent:该应用程序是否应该在任何时候都保持运行状态,默认为false。因为应用程序通常不应该设置本标识,持续模式仅仅应该设置给某些系统应用程序才是有意义的。
android:name:为应用程序所实现的Application子类的全名。当应用程序进程开始时,该类在所有应用程序组件之前被实例化。
android:process:应用程序运行的进程名,它的默认值为<manifest>元素里设置的包名,当然每个组件都可以通过设置该属性来覆盖默认值。如果你想两个应用程序共用一个进程的话,你可以设置他们的android:process相同,但前提条件是他们共享一个用户ID及被赋予了相同证书的时候
android:restoreAnyVersion:同样也是android2.2的一个新特性,用来表明应用是否准备尝试恢复所有的备份,甚至该备份是比当前设备上要新的版本,默认是false
android:taskAffinity:拥有相同的affinity的Activity理论上属于相同的Task,应用程序默认的affinity的名字是<manifest>元素中设定的package名
android:theme:是一个资源的风格,它定义了一个默认的主题风格给所有的activity,当然也可以在自己的theme里面去设置它,有点类似style。
3、第三层(<Activity>):属性
android:alwaysRetainTaskState:是否保留状态不变, 比如切换回home, 再从新打开,activity处于最后的状态。比如一个浏览器拥有很多状态(当打开了多个TAB的时候),用户并不希望丢失这些状态时,此时可将此属性设置为true
android:clearTaskOnLaunch :比如 P 是 activity, Q 是被P 触发的 activity, 然后返回Home, 重新启动 P,是否显示 Q
android:configChanges:当配置list发生修改时, 是否调用 onConfigurationChanged() 方法  比如 "locale|navigation|orientation". 
这个我用过,主要用来看手机方向改变的. android手机在旋转后,layout会重新布局, 如何做到呢?正常情况下. 如果手机旋转了.当前Activity后杀掉,然后根据方向重新加载这个Activity. 就会从onCreate开始重新加载.如果你设置了 这个选项, 当手机旋转后,当前Activity之后调用onConfigurationChanged() 方法. 而不跑onCreate方法等.
...太多了
4、第四层(<intent-filter>)
Intent filter内会设定的资料包括action,data与category三种。也就是说filter只会与intent里的这三种资料作对比动作
android:priority:(解释:有序广播主要是按照声明的优先级别,如A的级别高于B,那么,广播先传给A,再传给B。优先级别就是用设置priority属性来确定,范围是从-1000~1000,数越大优先级别越高)
action属性:action很简单,只有android:name这个属性。常见的android:name值为android.intent.action.MAIN,表明此activity是作为应用程序的入口。
category属性:category也只有android:name属性。常见的android:name值为android.intent.category.LAUNCHER(决定应用程序是否显示在程序列表里)
...太多了

Activity:
Android中,一个程序(application)对应一个独立进程(process),其中可以包含多个activities,activity可以可见,也可以不可见,但可见的程序界面必为activity.
Android系统的手机的每一个你能看到的画面都是一个activity,它像是一个画布,随你在上面怎么涂画,画个按钮,画个图片,画个列表,都随你!
专业点其实activity就是一个view类的派生类(比如Button, listview,imageview)的container。
ndroid平台的四大天王:Activity, Service, ContentProvider, BroadcastReceiver, 这四种组件通过Intent进行沟通,Intent就是桥梁了!
Activity主要包含六个方法,分别是onCreate,onStart,onResume,onPause,onStop,onDestory。onCreate和onDestory对应.onStart和onStop对应,onResume和onPause对应.
onCreate函数:注册你要用到的变量,比如说service,receiver,这些变量是无论你的Activity是在前台还是在后台都能够被响应到的,然后调用上面那个用来初始化的函数初始化布局信息.
onStart函数:注册一些变量.这些变量必须在Activity在前台的时候才能够被响应.
onResume函数:调用一些刷新UI的函数,每当Activity调用到这里时就要刷新一下UI各控件的状态.
onPause函数:一般是做一些变量的设置,因为这个时候Activity马上就要切到后台处理,可能有些变量就要被释放掉或者状态要做些相应的调整.
onStop函数:反注册在onStart函数中注册的变量.
onDestory函数:反注册在onCreate函数中注册的变量.


 

猜你喜欢

转载自blog.csdn.net/tran119/article/details/82935304
今日推荐