Studio 初步汇总

Studio 初步汇总

参考资料

可能是史上最全的Android Studio入门级文档
http://blog.csdn.net/Jefferyleng/article/details/51356980

Android Studio 使用说明(一)
http://blog.csdn.net/gantao754246624/article/details/52752788
Android studio工具介绍
http://www.cnblogs.com/jiuyi/p/6121662.html

1. 整体界面

1.1整体框架

整体框架1image

整体框架2image

1.2菜单 -file

file--image

1.3菜单build

菜单buildimage

1.4 快捷工具

快捷工具

1.5 Project视窗

Project视窗image

1.6-Structure视窗

-Structure视窗

1.7 代码编辑区域

代码编辑区域

1.8 Android 监控

Android 监控

1.9 Message

Message

2. 编译过程

编译过程

3. Gradle相关文件

3.1 project 中的 settings.gradle 说明
    // 这个Project中有2个Module
    include ':app', ':percent-23.1.0'
3.2 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
}
3.3 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     .gradle     文件夹     配置文件,无需更改、关注
Project     gradle  文件夹     包含了gradle-wrapper相关文件,无需更改、关注
Project     gradle.properties   文件  gradle启动的配置,如java虚拟机的内存占用等,一般无需修改
Project     gradlew/gradlew.bat     文件  初始化gradle相关变量的脚本

4. 文件和文件夹说明

Project根目录:
文件/文件夹  说明
.idea/  IDE的Project相关设置
app/    默认建立的module目录
build/  打包的临时目录
gradle/     gradle的相关目录
.gradle/    gradle的相关目录
.gitignore  git同步时的忽略的文件
builder.gradle  Project的gradle依赖
gradle.properties   project的gradle配置
gradlew     执行gradle构建的脚本(un*x)
gradlew.bat     执行gradle构建的脚本(windows)
local.properties    SDK目录设置
Project.iml     存放module信息
settings.gradle     Project下有哪些Module
module目录:
文件/文件夹  说明
build/  编译的中间数据、最终apk存放目录
build/source/r/debug/R.java     R文件
build/outputs/apk/  APK文件默认位置
libs/   导入的jar包存放的位置
src/    源码(java、xml、..)
src/androidTest/    测试代码存放位置
src/main/java/your/package/name     java代码
src/main/jniLibs/   动态连接库所在目录
src/main/assets/    资产文件存放目录
src/main/res/   资源目录
src/AndroidManifest.xml     清单文件
src/main/res/mipmap/    一般放置应用图标
app.iml     存放module信息(由AS创建)
build.gradle    gradle的构建文件
proguard-rules.pro  混淆设置

5. 设置

5.1 文件编码
文件编码

5.2 程序外观
程序外观
image
5.3 编辑区域外观
编辑区域外观

5.4 logcat外观
logcat外观

6. 快捷键

6.1 视窗快捷键
视窗快捷键

6.2 代码补全
代码补全

6.3 快捷键方案修改 && 编辑快捷键
快捷键方案修改 && 编辑快捷键
6.4 后缀补全
后缀补全
6.5 常用快捷键

动作  按键
删除行     Ctrl + Y
复制一行    Ctrl + D
上下移动代码  Alt + Shift + Up/Down
格式化代码   Ctrl + Alt + L
优化导导包   Alt + Ctrl + O
大小写转换   Ctrl + Shift + U
打开文件    两次shift
注释代码(//)    Ctrl + /
注释代码(/**/)  Ctrl + Shift + /
生成代码    Alt + Insert
快速定位错误  F2
查找  Ctrl + F
查看继承关系  Ctrl + H
查找+替换   Ctrl + R
快捷覆写方法  Ctrl + O

7 调试

 进入调试的两种方式

    以调试模式运行

    运行后调试

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

如何打断点

    代码左侧单击

    代码左侧单击时按着shift
7.1 断点类型
断点类型    什么时候会停下来    注意
行断点     执行到此行   无
成员变量断点  被赋值 或 访问    art虚拟机提供,需安卓5以上设备才有此功能
方法断点    进入方法或退出方法   会影响代码执行的效率,慎用
异常断点    出现了未捕获异常 及 捕获的异常    默认不开启
7.2 导入依赖

导入依赖
7.2.2 导入Library
导入Library
导入Library

7.2.3 导入文件jar包
导入文件jar包
7.2.4 导入Module依赖
导入Module依赖

7.2.5 对应关系
对应关系

7.2.6 插件管理
插件管理

安装插件的两种方式

    本地安装
    网络安装

image

8 打包APK

image

9. 混淆

作用及意义

减小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包在混淆后出错

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

比如

butterknife 
http://jakewharton.github.io/butterknife/ 查找 PROGUARD

baidu map sdk 
http://lbsyun.baidu.com/index.php?title=androidsdk/qa 查找 混淆

xutils 
https://github.com/wyouflf/xUtils 查找 混淆

10 多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"]
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值