码迷,mamicode.com
首页 > 其他好文 > 详细

2.AS入门教程

时间:2018-02-09 22:22:48      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:font   写入   keep   tps   标示   int   目标   对话   本地   

AndroidStudio

本文是关于androidStudio的一些基础知识

介绍

Google官方的Android集成开发环境(IDE = Integrated Development Environment),Eclipse + Adt插件的代替者

学习的必要性

趋势:

技术分享图片

更好用,对比eclipse如下:

技术分享图片

安装

下载:http://developer.android.com/sdk/index.html

具体安装参考网上文献

界面

  • 整体 
    技术分享图片技术分享图片
  • 菜单 -File 
    技术分享图片技术分享图片
  • 菜单 - Build

  • 技术分享图片技术分享图片

  • 快捷工具 

  • 技术分享图片
    技术分享图片

  • Project视窗 
    技术分享图片技术分享图片

-Structure视窗 
技术分享图片

技术分享图片

  • 代码编辑区域 

  • 技术分享图片
    技术分享图片

  • 代码编辑- 布局文件的多屏预览 

  • 技术分享图片
    技术分享图片

  • Android 监控 

  • 技术分享图片
    技术分享图片

  • Message 

技术分享图片
技术分享图片

建立HelloWorld项目

  • 重要概念

技术分享图片

As中强调应该把相关的工程放在同一个工作空间中

Gradle相关

概念

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。

https://zh.wikipedia.org/zh/Gradle

编译过程

http://developer.android.com/tools/building/index.html

技术分享图片

Gradle相关文件

  • 重要

project 中的 settings.gradle 说明

技术分享图片

 

 project 中的build.gradle说明

// 构建脚本
buildscript {
    // 仓库
    repositories {
        // 中央仓库  https://bintray.com/bintray/jcenter
        // 通过jar包的字符串包名,就可以下载到jar包了
        // 成熟的公司可能会有自己的仓库服务器,需要在此配置
         jcenter()
    }
    dependencies {
        // android gradle构建工具,用于处理module下的build.gradle文件,此版本与Gradle版本有配套关系,目前gradle已经到2.8了,但主要使用的是2.4
        classpath ‘com.android.tools.build:gradle:1.3.0‘
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
// 所有项目都依赖于jcenter
allprojects {
    repositories {
        jcenter()
    }
}
// gradle在执行构建任务时的清理配置
task clean(type: Delete) {
    delete rootProject.buildDir
}

module中的build.gradle详细说明

// 表示这个项目编译完成后,是一个anrdoid应用程序
apply plugin: ‘com.android.application‘
// 表示这个项目编译完成后,是一个anrdoid的库
//apply plugin: ‘com.android.library‘
android {
    // 编译的sdk版本,见sdk\platforms
    compileSdkVersion 23
    // 构建工具的版本,见sdk\build-tools
    buildToolsVersion "23.0.1"
    defaultConfig {
        // 包名:用于在市场上区分应用的唯一性的标示
        applicationId "cn.itcast.as.helloworld"
        // 最小sdk版本、目标sdk版,原先是放在清单文件中的
        minSdkVersion 15
        targetSdkVersion 23
        // 应用程序的版本号,和版本码,原先是放在清单文件中的
        versionCode 1
        versionName "1.0"
    }
    // 构建类型
    buildTypes {
        // debug版默认有配置,没有写在这里
        // 发行版
        release {
            // 是否混淆
            minifyEnabled false
            // 混淆配置文件
            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
        }
    }
}
// 关键:项目的依赖
dependencies {
    // 在项目中的libs中的所有的.jar结尾的文件,都是依赖
    compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
    // 依赖于junit测试
    testCompile ‘junit:junit:4.12‘
    // 还依赖于appcompat-v7,23.1.0版本
    compile ‘com.android.support:appcompat-v7:23.1.0‘
}

 

 

  • 其他

技术分享图片

 

 

文件和文件夹说明

  • Project根目录

技术分享图片

  • module目录

技术分享图片

设置

 文件编码 

  • 技术分享图片技术分享图片
  • 程序外观 
  • 技术分享图片
    技术分享图片
  • 编辑区域外观 
    技术分享图片 技术分享图片
    技术分享图片技术分享图片
  • logcat外观 
    技术分享图片技术分享图片 

 

快捷键

视窗快捷键

技术分享图片技术分享图片

代码补全

技术分享图片技术分享图片

快捷键方案修改 && 编辑快捷键

技术分享图片技术分享图片

活动模板

技术分享图片技术分享图片

后缀补全

技术分享图片技术分享图片

常用快捷键

技术分享图片

调试

进入调试的两种方式

  • 以调试模式运行

  • 运行后调试

 需要注意 运行的程序的代码应该与所看到的是同一份,不然点击提示会错位

如何打断点

  • 代码左侧单击

  • 代码左侧单击时按着shift键断点类型

断点类型

技术分享图片

导入module

导入Eclipse项目

File –> New –> Import Module

导入AndroidStudio项目

File –> New –> Import Module

导入AAR

File –> New –>New Module –> Import .jar/.aar package

删除导入的Module

当文件夹上显示了手机或柱状图 图标,说明此文件夹是受保护的,无法被删除

  1. 取消保护

打开Project Struecture。 选中要删除的module,点上面的减号。 然后点确定

技术分享图片

技术分享图片

  1. 删除文件

在原来是module的文件夹上点击鼠标右键,选中delete,在弹出的对话框上点确定。

技术分享图片

技术分享图片

 


 

导入依赖技术分享图片

技术分享图片

导入Library

技术分享图片 技术分享图片
技术分享图片技术分享图片

导入文件jar包

技术分享图片技术分享图片

导入Module依赖

技术分享图片技术分享图片

对应关系

技术分享图片技术分享图片

 


 

插件管理

技术分享图片技术分享图片

安装插件的两种方式

  • 本地安装
  • 网络安装

ButterKnife Zelezny的使用

技术分享图片技术分享图片

打包APK

技术分享图片技术分享图片

混淆

作用及意义

  • 减小apk大小,删除无用的类和方法
  • 避免被反编译后重要的程序逻辑暴露

配置

app/build.gradle

buildTypes {
    release {
    // false ,关闭混淆
    // true , 开启混淆
        minifyEnabled false
       // proguard-android.txt 是通用的混淆配置文件,放在sdk中  (sdk\tools\proguard\)
        // proguard-rules.pro 是项目都有的混淆配置文件 ,在项目的根目录中
        proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
    }
}

通用混淆文件说明

# 以#开头的都是注释,下同
# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
# 不使用大小写混合的类名
# 比如说 a.java 和 A.java。因为在windows下文件名是不区分大小写的,会导致文件的覆盖
-dontusemixedcaseclassnames
# 混淆第三方jar
-dontskipnonpubliclibraryclasses
# 打印更多日志
-verbose
# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize and preverify steps (and performs some
# of these optimizations on its own).
# 不做做优化(有时会弄巧成拙)
-dontoptimize
# 不做预校验
-dontpreverify
# Note that if you want to enable optimization, you cannot just
# include optimization flags in your own project configuration file;
# instead you will need to point to the
# "proguard-android-optimize.txt" file instead of this one from your
# project.properties file.
# 保留注解上的属性
-keepattributes *Annotation*
# 保留此类(com.google.vending.licensing.ILicensingService)不被混淆,google需要用到
-keep public class com.google.vending.licensing.ILicensingService
# 保留此类( com.android.vending.licensing.ILicensingService)不被混淆,google需要用到
-keep public class com.android.vending.licensing.ILicensingService
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
# 保持 native 方法不被混淆,混淆后不能正确调用底层方法了
-keepclasseswithmembernames class * {
    native <methods>;
}
# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
# 保留任何直接或间接继承与View的类的set和get开头的方法,不被混淆
-keepclassmembers public class * extends android.view.View {
   void set*(***);
   *** get*();
}
# We want to keep methods in Activity that could be used in the XML attribute onClick
# 保留直接或间接继承于Activity的类的 点击事件方法不被混淆,因为混淆后布局文件写的点击事件方法就会找不到
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
# 保留枚举类的如下 values 和valueOf方法
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
# 保留实现了Parcelable 接口的类的静态CREATOR常量
-keepclassmembers class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator CREATOR;
}
# 保留R.java中的及内部类的的所有静态字段
-keepclassmembers class **.R$* {
    public static <fields>;
}
# The support library contains references to newer platform versions.
# Don‘t warn about those in case this app is linking against an older
# platform version.  We know about them, and they are safe.
# 告诉ProGuard不要警告找不到android.support开头的包名.
-dontwarn android.support.**

项目特有的常用的混淆语法

    • 特定的类不被混淆 
      -keep class package.name.Klass {*;}
    • 某个包下的类不被混淆 
      -keep class package.name.** {*;}
    • 继承与某类的类不被混淆 
      -keep class * extends java.lang.annotation.Annotation { *; }

 

使用第三方jar包在混淆后出错

一般,都可以在网站上找到相应的混淆配置

比如

多APK打包

意义

  • 国内现状: 多个电子市场可提供apk的下载,用于统计市场的作用
  • 同一个应用程序,给不同的客户,需要连接不同的服务器

步骤

 1 在清单文件中添加metadata

<application
   ...... >
    <!-- market 表示键  ${MARKET}表示值 ,用${}表示会变......-->
    <meta-data android:name="market" android:value="${MARKET}"/>
    <!-- ......-->
</application>

2 在程序中获得metadata并使用

//TODO 从sp中获取是否是第一运行
boolean isFirstRun= true;
if(isFirstRun){
    // 通过PackageManager拿到在清单文件中记录的metadata信息
    PackageManager packageManager = getPackageManager();
    String packageName = getPackageName();
    int flag = PackageManager.GET_META_DATA;
    // 表示我们获取当前应用程序的application下的metadata数据
    ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, flag);
    // 传入键名,拿到键值
     String market = applicationInfo.metaData.getString("market");
    //TODO 获取imei
    String imei = "123456";
    // TODO 自己实现代码
    sentToServer(market, imei);
    //TODO 写入sp,下次启动程序就不发送了
}

3 添加flavor动态修改metadata

android{
  //......
 productFlavors {
        _360 {
            manifestPlaceholders = [MARKET: "_360"]
        }
        wandoujia {
            manifestPlaceholders = [MARKET: "wandoujia"]
        }
        anzhi {
            manifestPlaceholders = [MARKET: "anzhi"]
        }
    }
}

版本控制

SVN环境

安装TortoiseSVN

!!! 注意勾选 command line client tools

在as中,设置svn的命令行工具:

settings –> Version Control –> Subversion –>General –> use command line client 
选中TortoiseSVN的安装目录中的bin文件夹中的svn.exe

技术分享图片

上传本地代码

    • 设置同步 
      settings –> Version Control 
      把project后面加上版本控制的类型

技术分享图片

    • 设置忽略文件 
      settings –> Version Control –> Ignored Files 
      3种方式:特定文件、指定目录下的文件、特定规则文件

技术分享图片

提交目录

 project 右键 –> Subversion –> share directory 
这一步只提交了目录,文件并没有上传到服务器

 技术分享图片

技术分享图片

技术分享图片

上传文件

 project 右键 –> Subversion –> submit directory

 技术分享图片

技术分享图片

下载服务器的代码

 技术分享图片

 

 技术分享图片

提交代码,编辑冲突

 project 右键 –> Subversion –> submit directory

 

好习惯:先update,再submit

    • 冲突的解决 
      3种 接受服务器的,接受自己的,合并

技术分享图片

技术分享图片

技术分享图片

!!! 注意,在合并后,还需要submit

断开连接

    • 断开连接
      1. 先删除配置 
        在settings –> version control -掉同步文件夹

技术分享图片

2. 再删除文件 删除.svn文件夹

 技术分享图片

 

  • 忘记记录的用户名和密码

settings –> version control –> subversion –>clear auth cache

技术分享图片

 

2.AS入门教程

标签:font   写入   keep   tps   标示   int   目标   对话   本地   

原文地址:https://www.cnblogs.com/caimuqing/p/8436698.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!