android studio開発講座

58
C-LIS CO., LTD.

Upload: keiji-ariyama

Post on 06-Jan-2017

2.463 views

Category:

Software


2 download

TRANSCRIPT

C-LIS CO., LTD.

自己紹介

Android Studio本

3

2014年11月21日発売

技術評論社刊

Android Studio 0.8.6http://amzn.to/1HYRp32

4

5

改訂版が出ます(2016年1月上旬)

改訂版の原稿を送ったのが11月16日

7

11月20日

8

Android Studio 1.5 Release

サンプルコードのプロジェクトを

Android 1.5用に調整したのが11月23日

11月24日

10

Android Studio 2.0 Preview

著者校正を終えたのが

12月7日

12

2016年 1月 48日発売

技術評論社刊

Android Studio 1.5

13

著者校正中の出来事

15

16

17

18

わかったこと

19

• Android Developersは、日本語版のサイトと英語版のサイトで配布しているバイナリが違う

• 英語版のサイトでは 1.5 を、日本語版では1.4を配布している • 英語のURLにアクセスしても、下部の「言語設定」で日本語を選択していればサイト側が日本語サイトに自動的にリダイレクトする(コン

トロール不能)

続く!

Android Studio開発講座

2015/12/12

日本Androidの会 香川支部

今日のお題

22

Android Studioは、2013年に発表された

Androidアプリ向けの新しい開発環境

IntelliJ IDEAのCommunity Editionをベー

スに開発されている

Googleは、ADT(Android Developer

Tools)について、2015年末で開発サポート

を停止することをアナウンスしている

Android Studioの便利なところを紹介するよ!

エラーの訂正

23

エラーに飛ぶ(Jump to Next Error)

F2

Option + return

修正候補を選択する

(Show the list of available intention actions.)

Alt + return

Shift + F2

文字列リソースの作成

24

Option + returnAlt + return

レイアウトの作成

25

Option + returnAlt + return

Code Generation

Command + NAlt + insert

26

public static class PlaceholderFragment extends Fragment { private boolean mClickFlag;

Code Generationの憂鬱

27

public static class PlaceholderFragment extends Fragment { private boolean mClickFlag; public boolean ismClickFlag() { return mClickFlag; }

Code Generationの憂鬱

28

Naming Prefixの設定

29

[Preferences] → [Editor] → [Code Style]

→ [Java] → [Code Generation] → [Naming]

public static class PlaceholderFragment extends Fragment { private boolean mClickFlag; public boolean isClickFlag() { return mClickFlag; }

Field Prefixの設定

30

ライブラリの追加

31

apply plugin: 'com.android.application'android { …} dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.jakewharton:butterknife:7.0.1' }

app/build.gradle

Android Studioのライブラリは、Maven CentralやjCenterなどから追加

する(libsディレクトリに追加することもできる)

リファクタリング

インラインの記述をローカル変数に移動

33

Command + Option + VControl + Alt + V

@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getSupportFragmentManager() .beginTransaction() .add(android.R.id.content, new PlaceholderFragment(), "main") .commit();}

変数をフィールドに移動

34

Command + Option + FControl + Alt + F

@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Fragment fragment = new PlaceholderFragment(); getSupportFragmentManager() .beginTransaction() .add(android.R.id.content, fragment, "main") .commit();}

変数をフィールドに移動

35

private Fragment fragment; @Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fragment = new PlaceholderFragment(); getSupportFragmentManager() .beginTransaction() .add(android.R.id.content, fragment, "main") .commit();}

処理をメソッドへ切り出す

36

Command + Option + MControl + Alt + M

private void initializa() { placeholderFragment = new PlaceholderFragment(); getSupportFragmentManager() .beginTransaction() .add(android.R.id.content, placeholderFragment, "main") .commit();}

変数・メソッド・クラス名を変更

37

Shift + F6Shift + F6

private void initialize() { placeholderFragment = new PlaceholderFragment(); getSupportFragmentManager() .beginTransaction() .add(android.R.id.content, placeholderFragment, "main") .commit();}

変数・メソッド・クラス名を変更

38

Shift + F6Shift + F6

@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Fragment fragment = new PlaceholderFragment(); getSupportFragmentManager() .beginTransaction() .add(android.R.id.content, fragment, "main") .commit();}

ユニットテスト(JUnit4)

android { … defaultConfig { applicationId "io.keiji.tryandroidstudio" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } …} dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.jakewharton:butterknife:7.0.1' androidTestCompile 'com.android.support:support-annotations:23.1.1' androidTestCompile 'com.android.support.test:runner:0.3'}

build.gradleの編集

40

ユニットテストの置き場所

41

Userクラス

public class User { private long id; private String name; private boolean isMegane;

// setter, getter省略

}

42

UserTestクラス

import android.support.test.runner.AndroidJUnit4;import org.junit.Assert;import org.junit.Test; import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class UserTest { @Test public void 眼鏡をかけている() throws Exception { User user = new User(); Assert.assertTrue(user.isMegane()); }}

43

テストを実行io.keiji.tryandroidstudio.UserTest > 眼鏡をかけている[Nexus_5_API_18(AVD) - 4.3.1] [31mFAILED [0m

java.lang.AssertionError

at org.junit.Assert.fail(Assert.java:86)

:app:connectedDebugAndroidTest FAILED

FAILURE: Build failed with an exception.

* What went wrong:

Execution failed for task ':app:connectedDebugAndroidTest'.

> There were failing tests. See the report at: file:///Users/keiji_ariyama/Desktop/TryAndroidStudio/app/build/reports/androidTests/connected/index.html

44

package io.keiji.tryandroidstudio;import android.support.test.runner.AndroidJUnit4;import org.junit.Assert;import org.junit.Test; import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class UserTest { @Test public void 眼鏡をかけている() throws Exception { User user = new User(); Assert.assertTrue(user.isMegane()); }}

Androidに依存したテスト?

45

ユニットテスト(JVM)の置き場所

46

import android.support.test.runner.AndroidJUnit4;import org.junit.Assert;import org.junit.Test; import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class UserTest { @Test public void 眼鏡をかけている() throws Exception { User user = new User(); Assert.assertTrue(user.isMegane()); }}

UserTestクラス

47

テストを実行:app:testDebugUnitTest

io.keiji.tryandroidstudio.UserTest > 眼鏡をかけている FAILED java.lang.AssertionError at UserTest.java:11

2 tests completed, 1 failed

:app:testDebugUnitTest FAILED

FAILURE: Build failed with an exception.

* What went wrong: Execution failed for task ':app:testDebugUnitTest'. > There were failing tests. See the report at: file:///Users/keiji_ariyama/Desktop/TryAndroidStudio/app/build/reports/tests/debug/index.html

* Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 2.389 secs

C-LIS CO., LTD.

各製品名・ブランド名、会社名などは、一般に各社の商標または登録商標です。

本資料中では、©、®、™を割愛しています。

本資料は、有限会社シーリスの著作物であり、

クリエイティブコモンズの表示-非営利-継承 3.0 Unported ライセンスの元で公開しています。

寄せられた質問

Android Studioで

フリーザより強いという人造人間は倒せま

すか?

51

倒せるか倒せないかというより、悟空(ADT)は

死んだので、これからはAndroid Studioが頑張る

しかありません。

今日一番の豆知識

52

"人造人間編では連載中に試行錯誤が見られた。当初は19号と20号のみを登

場させる予定だったが、すでに担当編集を外れていた鳥嶋和彦が鳥山の家に

電話をかけてきて「やっと敵が出てきたとおもったらジジイとデブじゃない

ですか」と文句を言われ、仕方なく17号と18号をデザイン。しかし、鳥嶋

が再び家に電話をかけてきて「なんだ今度はガキですか」と再び文句を言わ

れ、当初は登場する予定すらなかったセルが登場することになった。"

Wikipedia 人造人間(ドラゴンボール)

https://ja.wikipedia.org/wiki/%E4%BA%BA%E9%80%A0%E4%BA%BA

%E9%96%93_(%E3%83%89%E3%83%A9%E3%82%B4%E3%83%B3%E3%83%9C%E3%83%BC

%E3%83%AB)

AndroidからMySQLのDBサーバーにアク

セスしたいのですが、実際の方法セキュリ

ティなどで注意することなどあれば

53

AndroidからMySQLのDBサーバーにアクセスする

と何が起こるかわからないので、めんどうでもAPI

を設計・実装した方がいいです。

Gradle で apk を暗号化するコマンドライ

ンから実行できる自前のビルドタスクを作っ

たのですが、それを Android Studio から

実行したり、 Android Studio のビルド時

に自動で実行できるようになりませんでしょ

うか?

54

task samplePreprocess << { println("この処理を先にする");}assembleDebug.dependsOn(samplePreprocess)

build.gradle - dependOn

既存のプロジェクトを

インポートする際のポイントについて

56

http://techbooster.github.io/c89/

Copyright TechBooster

58

ADT - Android Studio 完全移行マニュアル(仮題)

• ADT - Android Studioへの移行

• Gradle 101