Contenu connexe Similaire à Android Studioの魅力 Similaire à Android Studioの魅力 (20) Plus de Keiji Ariyama (7) Android Studioの魅力7. Android Studioの変遷 ∼ 1.0
7
2013/05 : I/O Preview
2013/07 : 0.2.0
2013/09/16 : 0.2.9
2013/09/24 : 0.2.10
2013/10/18 : 0.3
2013/12/18 : 0.4
2014/03/06 : 0.5
2014/06/06 : 0.6
2014/06/27 : BETA
2014/07/13 : 0.8.2
2014/10/29 : 0.8.14
2014/10/31 : 0.9
2014/11/20 : RC1
2014/12/08 : 1.0 Release
17. Android Studioの変遷 1.0 ∼
17
2014/12/08 : 1.0 Release
2015/01/15 : 1.1 Preview 1
2015/01/29 : 1.1 Beta
2015/02/11 : 1.1 RC1
2015/02/18 : 1.1 Release
2015/03/09 : 1.2 Preview 1
2015/04/02 : 1.2 Beta
2015/04/21 : 1.2 RC1
2015/04/30 : 1.2 Release
2015/05/30 : 1.3 Preview 1
2015/06/10 : 1.2.2 Release
2015/06/19 : 1.3 Beta
2015/07/17 : 1.3 RC3
18. 2014/12/08 : 1.0 Release
2015/01/15 : 1.1 Preview 1
2015/01/29 : 1.1 Beta
2015/02/11 : 1.1 RC1
2015/02/18 : 1.1 Release
2015/03/09 : 1.2 Preview 1
2015/04/02 : 1.2 Beta
2015/04/21 : 1.2 RC1
2015/04/30 : 1.2 Release
2015/05/30 : 1.3 Preview 1
2015/06/10 : 1.2.2 Release
2015/06/19 : 1.3 Beta
2015/07/17 : 1.3 RC3
Android Studio 1.3 RC3
31. Parcelable Generation
protected WiFiApSetting(Parcel in) {
id = in.readLong();
ssid = in.readString();
security = in.readInt();
password = in.readString();
lastUsedDate = in.readLong();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(id);
dest.writeString(ssid);
dest.writeInt(security);
dest.writeString(password);
dest.writeLong(lastUsedDate);
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<WiFiApSetting> CREATOR = new Creator<WiFiApSetting>() {
@Override
public WiFiApSetting createFromParcel(Parcel in) {
return new WiFiApSetting(in);
}
@Override
public WiFiApSetting[] newArray(int size) {
return new WiFiApSetting[size];
}
};
31
36. dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile project(':wifiapmanager')
compile 'com.android.support:design:22.2.0'
compile 'com.android.support:recyclerview-v7:22.2.0'
compile 'com.android.support:cardview-v7:22.2.0'
compile 'com.jakewharton:butterknife:6.1.0'
compile 'com.github.bumptech.glide:glide:3.6.0'
compile 'de.greenrobot:eventbus:2.4.0'
compile 'io.realm:realm-android:0.80.3'
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
}
LeakCanary
build.gradle
36
40. apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "jp.co.c_lis.kehai.android"
minSdkVersion 15
targetSdkVersion 22
versionCode 32
versionName "0.3.2"
}
buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile project(':wifiapmanager')
compile 'com.android.support:design:22.2.1'
compile 'com.android.support:recyclerview-v7:22.2.1'
compile 'com.android.support:cardview-v7:22.2.1'
}
build.gradle
40
build.gradle
42. def gitSha() {
return 'git rev-parse --short HEAD'.execute().text.trim()
}
android {
buildTypes {
debug {
minifyEnabled false
versionNameSuffix ' (' + gitSha() + ')'
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
build.gradle
42
build.gradle
43. /**
* Automatically generated file. DO NOT MODIFY
*/
package io.keiji.kehai;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID =
"jp.co.c_lis.kehai.android";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "defaultFlavor";
public static final int VERSION_CODE = 32;
public static final String VERSION_NAME = "0.3.2 (837c123)";
}
BuildConfig
43
build/generated/source/buildConfig/…/BuildConfig.java
44. android {
defaultConfig {
applicationId "jp.co.c_lis.kehai.android"
minSdkVersion 15
targetSdkVersion 22
versionCode 32
versionName "0.3.2"
buildConfigField "String", "TEST", ""MEGANEKKO""
}
}
BuildConfigのフィールド
44
build.gradle
45. /**
* Automatically generated file. DO NOT MODIFY
*/
package io.keiji.kehai;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID =
"jp.co.c_lis.kehai.android";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "defaultFlavor";
public static final int VERSION_CODE = 32;
public static final String VERSION_NAME = "0.3.2 (837c123)";
// Fields from default config.
public static final String TEST = "MEGANEKKO";
}
BuildConfigのフィールド
45
build/generated/source/buildConfig/…/BuildConfig.java
46. リソース
android {
defaultConfig {
applicationId "jp.co.c_lis.kehai.android"
minSdkVersion 15
targetSdkVersion 22
versionCode 32
versionName "0.3.2"
resValue "string", "res_value_test", "hello gradle"
}
}
46
build/generated/res/generated/…/values/generated.xml
49. Build Types
android {
buildTypes {
debug {
minifyEnabled false
versionNameSuffix ' (' + gitSha() + ')'
proguardFiles getDefaultProguardFile('proguard-
android.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-
android.txt'), 'proguard-rules.pro'
}
}
}
49
build.gradle
52. Product Flavors
package io.keiji.kehai;
public enum OssLibrary {
MaterialIcons("Material icons", "license_creative_commons-4.0.txt"),
AOSP("Android Open Source Project", "license_aosp.txt"),
V7Support("Android v7 Support Libraries", "license_aosp.txt"),
DesignSupport("Android Design Support Library", "license_aosp.txt"),
Glide("Glide", "license_glide.txt"),
ButterKnife("Butter Knife", "license_butterknife.txt"),
EventBus("EventBus", "license_eventbus.txt"),
Realm("Realm", "license_realm.txt");
public final String name;
public final String fileName;
OssLibrary(String name, String file) {
this.name = name;
fileName = file;
}
}
52
src/main/io.keij.kehai/OssLibrary.java
55. Product Flavors
package io.keiji.kehai;
public enum OssLibrary {
Nothing("", "");
public final String name;
public final String fileName;
OssLibrary(String name, String file) {
this.name = name;
fileName = file;
}
}
55
src/forBetaTesting/io.keij.kehai/OssLibrary.java
59. android {
splits {
density {
enable true
exclude "ldpi", "tvdpi", "xxxhdpi"
compatibleScreens 'small', 'normal', 'large', 'xlarge'
}
}
}
APK Splits
59
http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
build.gradle
61. APK Splits Sample
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "jp.co.c_lis.apkspritsample"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
build.gradle
61
62. APK Splits Sample
splits {
density {
enable true
exclude "ldpi", "tvdpi", "xxxhdpi"
compatibleScreens 'small', 'normal', 'large', 'xlarge'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
build.gradle
62
63. APK Splits Sample
$ ./gradlew assemble
Parallel execution is an incubating feature.
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:
:
:app:assembleRelease
:app:assemble
BUILD SUCCESSFUL
63
66. APK Splits Sample
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="jp.co.c_lis.apkspritsample"
platformBuildVersionCode="22"
platformBuildVersionName="5.1.1-1819727">
<compatible-screens>
<screen
android:screenDensity="hdpi"
android:screenSize="small" />
<screen
android:screenDensity="hdpi"
android:screenSize="large" />
<screen
android:screenDensity="hdpi"
android:screenSize="xlarge" />
<screen
android:screenDensity="hdpi"
android:screenSize="normal" />
</compatible-screens>
AndroidManifest.xml
66
69. Android Studioの今後
dev branch release branch IntelliJ Notes
studio-1.2-dev studio-1.2-release idea14-1.2-dev CLOSED
studio-1.3-dev studio-1.3-release idea14-1.3-dev BUG FIX ONLY
studio-1.4-dev idea14-1.4-dev for 1.4 work
studio-master-dev studio-master-dev idea14-dev for post 1.4 work
http://tools.android.com/build#TOC-Branches
69
70. • プロジェクトのファイル構成を変更
• main/java/…
• androidTest/java/…
• AndroidManifest.xmlの設定をbuild.gradleに移行
• applicationId / *SdkVersion / versionCode / versionName
• 依存関係をdependenciesに記載
ADT から Studioへの移行
70
http://tools.android.com/tech-docs/new-build-system/migrating-from-eclipse-projects
71. • ADT側でExport →「Generate Gradle build files」
• Studio側でImport
ADT から Studioへの移行
71
http://tools.android.com/tech-docs/new-build-system/migrating-from-eclipse-projects
72. • ADT側でExport →「Generate Gradle build files
• Studio側で
http://tools.android.com/tech-docs/new-build-system/migrating-from-eclipse-projects
ADT から Studioへの移行
72
78. 意図しないバージョンアップ
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile project(':wifiapmanager')
compile 'com.android.support:design:22.2.0'
compile 'com.android.support:recyclerview-v7:22.2.0'
compile 'com.android.support:cardview-v7:22.2.0'
compile 'com.jakewharton:butterknife:6.1.0'
compile 'com.github.bumptech.glide:glide:3.6.0'
compile 'de.greenrobot:eventbus:2.4.0'
compile 'io.realm:realm-android:+'
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-
op:1.3.1'
}
78
build.gradle
バージョンは固定すること!