kotlin で android アプリを作ってみた

36
Kotlin で Android ででででででででで bina1204 1

Upload: bina1204

Post on 19-May-2015

3.371 views

Category:

Business


8 download

TRANSCRIPT

Page 1: Kotlin で android アプリを作ってみた

Kotlin で Android アプリを作ってみた

bina1204

1

Page 2: Kotlin で android アプリを作ってみた

アジェンダ

• 自己紹介

• Kotlin で Android アプリを作ってみた

• Java と Kotlin の比較

• まとめ

2

Page 3: Kotlin で android アプリを作ってみた

自己紹介

3

Page 4: Kotlin で android アプリを作ってみた

プロフィール

びな@bina1204

http://gsbina.com

4

Page 5: Kotlin で android アプリを作ってみた

Kotlin 初心者です

5

Page 6: Kotlin で android アプリを作ってみた

Kotlin で Android アプリを作ってみた

6

Page 7: Kotlin で android アプリを作ってみた

Kotlin を覚える

Kotlin Advent Calendar 2012 ( 全部俺 ) : ATNDhttp://atnd.org/events/34627

7

Page 8: Kotlin で android アプリを作ってみた

Kotlin の Android アプリ開発の準備

8.2 Android アプリ開発 - プログラミング言語Kotlin 解説

https://sites.google.com/site/tarokotlin/chap8/sec82

8

Page 9: Kotlin で android アプリを作ってみた

アプリを作ってみた

タップするとスリープする

9

Page 10: Kotlin で android アプリを作ってみた

アプリを作ってみた

10

Page 11: Kotlin で android アプリを作ってみた

Java と Kotlin の比較

11

Page 12: Kotlin で android アプリを作ってみた

AdminReceiver.Javapackage com.gsbina.android.sleepnow;

import android.app.admin.DeviceAdminReceiver;

public class AdminReceiver extends DeviceAdminReceiver {

}

12

Page 13: Kotlin で android アプリを作ってみた

AdminReceiver.ktpackage com.gsbina.android.sleepnow

import android.app.admin.DeviceAdminReceiver

public class AdminReceiver: DeviceAdminReceiver() {

}

13

Page 14: Kotlin で android アプリを作ってみた

CreateShortcutActivity.Java@Overrideprotected void onResume() { super.onResume();

final Intent sleepIntent = new Intent(PhoneSleepActivity.ACTION_SLEEP);

final Intent shortcutIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, sleepIntent); shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Sleep Now"); shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, R.drawable.ic_launcher);

sendBroadcast(shortcutIntent);

finish();}

14

Page 15: Kotlin で android アプリを作ってみた

CreateShortcutActivity.Ktprotected override fun onResume() { super<Activity>.onResume()

val sleepIntent = Intent(PhoneSleepActivity.ACTION_SLEEP)

val shortcutIntent = Intent("com.android.launcher.action.INSTALL_SHORTCUT") shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, sleepIntent) shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Sleep Now"); shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, R.drawable.ic_launcher)

sendBroadcast(shortcutIntent)

finish()}

15

Page 16: Kotlin で android アプリを作ってみた

PhoneSleepActivity.java@Overrideprotected void onResume() { super.onResume(); final DevicePolicyManager dpm = (DevicePolicyManager)getSystemService(DEVICE_POLICY_SERVICE); if (dpm.isAdminActive(new AdminReceiver().getWho(this))) { // スリープする dpm.lockNow(); } else { Toast.makeText(this, "Cannot sleep", Toast.LENGTH_SHORT).show(); startActivity(new Intent(this, MainActivity.class)); } finish();}

public static final String ACTION_SLEEP = "com.gsbina.android.sleepnow.action.SLEEP";

16

Page 17: Kotlin で android アプリを作ってみた

PhoneSleepActivity.Ktprotected override fun onResume() { super<Activity>.onResume() val dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager if (dpm.isAdminActive(AdminReceiver().getWho(this))) { // スリープする dpm.lockNow(); } else { Toast.makeText(this, "Cannot sleep", Toast.LENGTH_SHORT)?.show() startActivity(Intent(this, javaClass<MainActivity>())) }

finish()}

class object { val ACTION_SLEEP = "com.gsbina.android.sleepnow.action.SLEEP"}

17

Page 18: Kotlin で android アプリを作ってみた

MainActivity.javaprivate final MainActivity mSelf = this;

@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);

setUpView();}

private DevicePolicyManager mDevicePolicyManager;

private void setUpView() { findViewById(R.id.device_admin).setOnClickListener(new OnClickDeviceAdmin()); findViewById(R.id.btn_create_shortcut).setOnClickListener(new OnClickCreateShortcut()); findViewById(R.id.btn_display_notification).setOnClickListener(new

OnClickDisplayNotification()); findViewById(R.id.btn_hide_notification).setOnClickListener(new OnClickHideNotification()); findViewById(R.id.btn_sleep).setOnClickListener(new OnClickSleep()); findViewById(R.id.btn_uninstall).setOnClickListener(new OnClickUninstall());}

18

Page 19: Kotlin で android アプリを作ってみた

MainActivity.ktval mSelf = this

protected override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main)

setUpView()}

var mDevicePolicyManager: DevicePolicyManager? = null

private fun setUpView() { findViewById(R.id.device_admin)?.setOnClickListener(OnClickDeviceAdmin()) findViewById(R.id.btn_create_shortcut)?.setOnClickListener(OnClickCreateShortcut()) findViewById(R.id.btn_display_notification)?.setOnClickListener(OnClickDisplayNotification()) findViewById(R.id.btn_hide_notification)?.setOnClickListener(OnClickHideNotification()) findViewById(R.id.btn_sleep)?.setOnClickListener(OnClickSleep()) findViewById(R.id.btn_uninstall)?.setOnClickListener(OnClickUninstall())}

19

Page 20: Kotlin で android アプリを作ってみた

MainActivity.javaprivate class OnClickDeviceAdmin implements OnClickListener {

@Override public void onClick(View v) { final Switch s = (Switch) v; if (s.isChecked()) { activateDeviceAdmin(); } else { mDevicePolicyManager.removeActiveAdmin(new AdminReceiver().getWho(mSelf)); new Handler().postDelayed(new Runnable() { @Override public void run() { updateView(); } }, 250); } }

private void activateDeviceAdmin() { final Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); final ComponentName name = new AdminReceiver().getWho(mSelf); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, name); startActivity(intent); }

}

20

Page 21: Kotlin で android アプリを作ってみた

MainActivity.ktinner class OnClickDeviceAdmin(): OnClickListener { public override fun onClick(v: View?) { val s = v as Switch if (s.isChecked()) { activateDeviceAdmin() } else { mDevicePolicyManager?.removeActiveAdmin(AdminReceiver().getWho(mSelf)) Handler().postDelayed(Runnable { updateView() }, 250) } }

private fun activateDeviceAdmin() { val intent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN) val name = AdminReceiver().getWho(mSelf) intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, name) startActivity(intent) }}

21

Page 22: Kotlin で android アプリを作ってみた

APK ファイルの比較

22

Page 23: Kotlin で android アプリを作ってみた

サイズ

Java

約 229 KB

Kotlin

約 467 KB

23

Page 24: Kotlin で android アプリを作ってみた

classes.dex

Javaandroidcom

Kotlinandroidcomjetkotlinorg

24

Page 25: Kotlin で android アプリを作ってみた

AdminReceiver.class(Java)package com.gsbina.android.sleepnow;

import android.app.admin.DeviceAdminReceiver;

public class AdminReceiver extends DeviceAdminReceiver{

public AdminReceiver() { }}

25

Page 26: Kotlin で android アプリを作ってみた

AdminReceiver.class(Kotlin)package com.gsbina.android.sleepnow;

import android.app.admin.DeviceAdminReceiver;import jet.JetObject;

public final class AdminReceiver extends DeviceAdminReceiver implements JetObject{

public AdminReceiver() { }}

26

Page 27: Kotlin で android アプリを作ってみた

CreateShortcutActivity.class(Java)protected void onResume(){ super.onResume(); Intent intent = new Intent("com.gsbina.android.sleepnow.action.SLEEP"); Intent intent1 = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); Intent intent2 = intent1.putExtra("android.intent.extra.shortcut.INTENT", intent); Intent intent3 = intent1.putExtra("android.intent.extra.shortcut.NAME", "Sleep Now"); Intent intent4 = intent1.putExtra("android.intent.extra.shortcut.ICON_RESOURCE",

0x7f020000); sendBroadcast(intent1); finish();}

27

Page 28: Kotlin で android アプリを作ってみた

CreateShortcutActivity.class(Kotlin)protected void onResume(){ super.onResume(); String s = PhoneSleepActivity.object$.getACTION_SLEEP(); Intent intent = new Intent(s); Intent intent1 = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); String s1 = Intent.EXTRA_SHORTCUT_INTENT; Intrinsics.checkFieldIsNotNull(s1, "Intent", "EXTRA_SHORTCUT_INTENT"); Parcelable parcelable = (Parcelable)intent; Intent intent2 = intent1.putExtra(s1, parcelable); String s2 = Intent.EXTRA_SHORTCUT_NAME; Intrinsics.checkFieldIsNotNull(s2, "Intent", "EXTRA_SHORTCUT_NAME"); Intent intent3 = intent1.putExtra(s2, "Sleep Now"); String s3 = Intent.EXTRA_SHORTCUT_ICON_RESOURCE; Intrinsics.checkFieldIsNotNull(s3, "Intent", "EXTRA_SHORTCUT_ICON_RESOURCE"); int i = R.drawable.ic_launcher; Intent intent4 = intent1.putExtra(s3, i); sendBroadcast(intent1); finish();}

28

Page 29: Kotlin で android アプリを作ってみた

PhoneSleepActivity.class(Java)protected void onResume(){ super.onResume(); DevicePolicyManager devicepolicymanager =

(DevicePolicyManager)getSystemService("device_policy"); android.content.ComponentName componentname = (new AdminReceiver()).getWho(this); if(devicepolicymanager.isAdminActive(componentname) { devicepolicymanager.lockNow(); } else { Toast.makeText(this, "Cannot sleep", 0).show(); Intent intent = new Intent(this, com/gsbina/android/sleepnow/MainActivity); startActivity(intent); } finish();}

public static final String ACTION_SLEEP = "com.gsbina.android.sleepnow.action.SLEEP";

29

Page 30: Kotlin で android アプリを作ってみた

PhoneSleepActivity.class(Kotlin)protected void onResume(){ super.onResume(); String s = Context.DEVICE_POLICY_SERVICE; Intrinsics.checkFieldIsNotNull(s, "Context", "DEVICE_POLICY_SERVICE"); Object obj = getSystemService(s); if(obj == null) throw new TypeCastException("jet.Any? cannot be cast to

android.app.admin.DevicePolicyManager"); DevicePolicyManager devicepolicymanager = (DevicePolicyManager)obj; android.content.ComponentName componentname = (new AdminReceiver()).getWho(this); if(devicepolicymanager.isAdminActive(componentname)) { devicepolicymanager.lockNow(); } else { Context context = getApplicationContext(); CharSequence charsequence = (CharSequence)"Cannot sleep"; int i = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, charsequence, i); if(toast != null) toast.show(); Intent intent = new Intent(this, com/gsbina/android/sleepnow/MainActivity); startActivity(intent); } finish();}

30

Page 31: Kotlin で android アプリを作ってみた

PhoneSleepActivity.class(Kotlin)public static final class object implements JetObject{

public final String getACTION_SLEEP() { return ACTION_SLEEP; }

private final String ACTION_SLEEP = "com.gsbina.android.sleepnow.action.SLEEP";

object() { }}

public static final object object$ = new object();

31

Page 32: Kotlin で android アプリを作ってみた

まとめ

32

Page 33: Kotlin で android アプリを作ってみた

まとめ

33

final Intent intent = new Intent(this, MainActivity.class);

val intent = Intent(this, javaClass<MainActivity>());

Page 34: Kotlin で android アプリを作ってみた

まとめ

34

new Runnable() { @Override public void run() { // 処理 }}

Runnable { // 処理}

Page 35: Kotlin で android アプリを作ってみた

まとめ ( 定数 )

35

public static final String ACTION_SLEEP = "com.gsbina.android.sleepnow.action.SLEEP";

class object { val ACTION_SLEEP = "com.gsbina.android.sleepnow.action.SLEEP"}

Page 36: Kotlin で android アプリを作ってみた

まとめ

コーディングの量が減る

36

Java Kotlin

MainActivity 3773 3395

AdminReceiver 131 125

CreateShortcutActivity 594 566

PhoneSleepActivity 631 635

[ 文字数 ]