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

介绍

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

学习的必要性

趋势:

2.AS入门教程

更好用,对比eclipse如下:

2.AS入门教程

安装

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

具体安装参考网上文献

界面

  • 整体 
    2.AS入门教程2.AS入门教程
  • 菜单 -File 
    2.AS入门教程2.AS入门教程
  • 菜单 - Build

  • 2.AS入门教程2.AS入门教程

  • 快捷工具 

  • 2.AS入门教程
    2.AS入门教程

  • Project视窗 
    2.AS入门教程2.AS入门教程

-Structure视窗 
2.AS入门教程

2.AS入门教程

  • 代码编辑区域 

  • 2.AS入门教程
    2.AS入门教程

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

  • 2.AS入门教程
    2.AS入门教程

  • Android 监控 

  • 2.AS入门教程
    2.AS入门教程

  • Message 

2.AS入门教程
2.AS入门教程

建立HelloWorld项目

  • 重要概念

2.AS入门教程

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

2.AS入门教程

Gradle相关文件

  • 重要

project 中的 settings.gradle 说明

2.AS入门教程

 

 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'
}

 

 

  • 其他

2.AS入门教程

 

 

文件和文件夹说明

  • Project根目录

2.AS入门教程

  • module目录

2.AS入门教程

设置

 文件编码 

  • 2.AS入门教程2.AS入门教程
  • 程序外观 
  • 2.AS入门教程
    2.AS入门教程
  • 编辑区域外观 
    2.AS入门教程 2.AS入门教程
    2.AS入门教程2.AS入门教程
  • logcat外观 
    2.AS入门教程2.AS入门教程 

 

快捷键

视窗快捷键

2.AS入门教程2.AS入门教程

代码补全

2.AS入门教程2.AS入门教程

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

2.AS入门教程2.AS入门教程

活动模板

2.AS入门教程2.AS入门教程

后缀补全

2.AS入门教程2.AS入门教程

常用快捷键

2.AS入门教程

调试

进入调试的两种方式

  • 以调试模式运行

  • 运行后调试

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

如何打断点

  • 代码左侧单击

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

断点类型

2.AS入门教程

导入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,点上面的减号。 然后点确定

2.AS入门教程

2.AS入门教程

  1. 删除文件

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

2.AS入门教程

2.AS入门教程

 


 

导入依赖2.AS入门教程

2.AS入门教程

导入Library

2.AS入门教程 2.AS入门教程
2.AS入门教程2.AS入门教程

导入文件jar包

2.AS入门教程2.AS入门教程

导入Module依赖

2.AS入门教程2.AS入门教程

对应关系

2.AS入门教程2.AS入门教程

 


 

插件管理

2.AS入门教程2.AS入门教程

安装插件的两种方式

  • 本地安装
  • 网络安装

ButterKnife Zelezny的使用

2.AS入门教程2.AS入门教程

打包APK

2.AS入门教程2.AS入门教程

混淆

作用及意义

  • 减小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

2.AS入门教程

上传本地代码

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

2.AS入门教程

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

2.AS入门教程

提交目录

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

 2.AS入门教程

2.AS入门教程

2.AS入门教程

上传文件

 project 右键 –> Subversion –> submit directory

 2.AS入门教程

2.AS入门教程

下载服务器的代码

 2.AS入门教程

 

 2.AS入门教程

提交代码,编辑冲突

 project 右键 –> Subversion –> submit directory

 

好习惯:先update,再submit

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

2.AS入门教程

2.AS入门教程

2.AS入门教程

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

断开连接

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

2.AS入门教程

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

 2.AS入门教程

 

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

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

2.AS入门教程

 

相关文章:

  • 2022-12-23
  • 2021-10-14
  • 2021-11-09
  • 2022-03-01
  • 2021-05-20
  • 2022-12-23
  • 2021-10-31
  • 2022-12-23
猜你喜欢
  • 2022-01-05
  • 2021-09-07
  • 2018-06-07
  • 2022-01-01
  • 2021-07-11
  • 2021-07-07
  • 2022-12-23
相关资源
相似解决方案