PAB2018-M4-SI-39-04-M.ZAHID SYAFNEL
3.1 P: Menggunakan Debugger
Tugas 1. Membuat Proyek dan Aplikasi SimpleCalc
Membuat project simple calculator dari source code github.
- Unduh dan buka proyek SimpleCalc
- Unduh dan ekstrak folder proyek SimpleCalc project folder.
- Mulai Android Studio dan pilih File > Open.
- Buka folder untuk menemukan SimpleCalc, pilih file folder, dan klik OK.
1.2 Menjelajahi Layout
– Menjalankan aplikasi dan melihat logcat .Jika semua edit text di masukkan angka
Tugas 2. Menjalankan SimpleCalc di Debugger
2.1 Memulai dan Menjalankan aplikasi dalam mode debug
- Dalam Android Studio, pilih Run > Debug app atau klik ikon Debug di toolbar.
Jika aplikasi sudah berjalan, Anda akan ditanyakan apakah ingin memulai ulang aplikasi dalam mode debug. Klik Restart app.
Android Studio membangun dan menjalankan aplikasi pada emulator atau perangkat. Men-debug sama saja pada kedua kasus. Saat Android Studio memulai debugger, Anda mungkin melihat pesan yang berbunyi “Waiting fo debugger” pada perangkat sebelum Anda bisa menggunakan aplikasi.
Jika tampilan Debug tidak secara otomatis muncul dalam Android Studio, klik tab Debug di bagian bawah layar, lalu tab Debugger.
- Buka file MainActivity.java dan klik baris keempat metode compute() (baris setelah pernyataan try).
- Klik di gutter kiri jendela editor baris tersebut, sebelah nomor baris. Titik merah muncul di baris itu, menunjukkan breakpoint.
Anda juga bisa menggunakan Run > Toggle Line Breakpoint atau Control-F8 (Command-F8 di OS X) untuk
menyetel atau menghapus breakpoint pada baris.
- Periksa jendela Debug. Termasuk bagian ini:
- Panel Frames: menunjukkan frame tumpukan eksekusi saat ini untuk thread yang diberikan. Tumpukan eksekusi menunjukkan setiap kelas dan metode yang telah dipanggil dalam aplikasi dan dalam waktu proses Android, dengan metode terbaru di bagian atas. Thread muncul pada menu tarik turun. Aplikasi saat ini berjalan dalam thread utama, dan aplikasi menjalankan metode compute() dalam MainActivity.
- Panel Variables: menampilkan variabel dalam lingkup saat ini dan nilainya. Pada tahap eksekusi aplikasi ini, variable yang tersedia adalah: this (untuk aktivitas), operator (nama operator dari Calculator.Operator, tempat metode dipanggil), dan variabel global untuk EditText dan TextView. Setiap variabel dalam panel ini memiliki segitiga pengungkapan yang memungkinkan Anda melihat properti objek yang berada dalam variabel tersebut. Coba luaskan variabel untuk menjelajahi propertinya.
- Panel Watches: menampilkan nilai-nilai untuk variabel watches yang sudah Anda setel. Watches mengizinkan Anda mengawasi variabel spesifik dalam program dan melihat variabel tersebut berubah saat program dijalankan.
- Lanjutkan eksekusi aplikasi dengan Run > Resume Program atau klik Resume ikon di sisi kiri tampilan jendela debugger.
Aplikasi SimpleCalc terus berjalan, dan Anda bisa berinteraksi dengan aplikasi sampai eksekusi kode lain waktu mencapai breakpoint.
2.2 Men-debug aplikasi yang berjalan
- Jalankan aplikasi SimpleCalc secara normal, dengan ikon Run ikon.
- Pilih Run > Attach debugger to Android process atau klik Attach di bilah alat.
Klik tombol run app untuk menjalankan aplikasi seperti biasa => Klik ikon attach untuk memindahkan aplikasi yang sudah berjalan ke mode debug => Klik OK
Muncul Jendela Debug. Ini berarti aplikasi sudah dalam mode debug. Jika jendela debug tidak muncul secara otomatis, bisa klik tab Debug dibagian bawah layer kemudian pilih lagi tab debugger
Tugas 3: Menjelajahi Fitur Debugger
3.1 Menyusuri eksekusi aplikasi
- Debug aplikasi dalam Android Studio, dengan breakpoint yang sudah disetel pada tugas terakhir.
- Dalam aplikasi, masukkan angka dalam tampilan EditText dan klik tombol Add.
Eksekusi aplikasi Anda berhenti pada breakpoint yang sudah disetel sebelumnya, dan debugger menunjukkan status aplikasi saat ini. Baris saat ini disorot dalam kode Anda.
- Klik tombol Step Over di bagian atas jendela debugger
- Di baris berikutnya (penetapan untuk operandTwo), klik ikon Step Into ikon
- Klik Step Over untuk menjalankan setiap baris dalam getOperand(). Perhatikan bahwa saat metode selesai debugger mengembalikan Anda ke titik awal saat Anda memulai metode, dan semua panel diperbarui dengan informasi baru.
3.2: Menguji Aplikasi dengan Pengujian Unit
Tugas 1. Menjelajahi dan menjalankan SimpleCalc di Android Studio
- Menjelajahi rangkaian sumber dan SimpleCalc
- Membuka proyek SimpleCalc dalam Android Studio jika belum. Jika belum memiliki SimpleCalc Anda bisa menemukannya di [tautan unduhan] ini(https://github.com/google-developer-training/androidfundamentals/tree/master/SimpleCalc).
- Buka tampilan Project, dan perluas folder aplikasi dan java.
Folder java dalam tampilan Android mencantumkan semua rangkaian sumber dalam aplikasi menurut nama paket (com.android.example.simplecalc), dengan pengujian dan androidTest ditampilkan dalam tanda kurung setelah nama paket. Dalam aplikasi SimpleCalc, hanya rangkaian sumber utama dan pengujian yang digunakan.
- Luaskan folder com.android.example.simplecalc (test).
Ini adalah folder tempat Anda meletakkan pengujian unit lokal aplikasi. Android Studio membuat kelas pengujian contoh untuk Anda dalam folder ini untuk proyek baru, tetapi untuk SimpleCalc, kelas pengujiannya disebut CalculatorTest.
- Buka CalculatorTest.java.
- Periksa kode dan catat hal-hal berikut ini:
- Satu-satunya impor adalah dari paket org.junit, org.hamcrest, dan android.test. Tidak ada dependensi pada kelas framework Android di sini.
- Anotasi @RunWith(JUnit4.class) menunjukkan runner yang akan digunakan untuk menjalankan pengujian dalam kelas ini. Runner pengujian adalah pustaka atau serangkaian alat yang memungkinkan pengujian terjadi dan hasilnya dicetak ke log. Untuk pengujian dengan penyiapan atau persyaratan infrastruktur yang lebih rumit (seperti Espresso), Anda akan menggunakan runner pengujian yang berbeda. Untuk contoh berikut kita menggunakan runner pengujian JUnit4 dasar.
- Anotasi @SmallTest menunjukkan bahwa semua pengujian dalam kelas ini adalah pengujian unit yang tidak memiliki dependensi dan berjalan dalam milidetik. Anotasi @SmallTest, @MediumTest, dan @LargeTest adalah konvensi yang memudahkan membundel grup pengujian ke dalam kelompok fungsionalitas yang serupa.
- Metode setUp() digunakan untuk menyiapkan lingkungan sebelum pengujian, dan menyertakan anotasi @Before. Dalam hal ini, penyiapan membuat instance baru kelas Calculator dan menetapkannya ke variabel anggota mCalculator.
- Metode addTwoNumbers() adalah pengujian yang sebenarnya, dan dianotasi dengan @Test. Hanya metode dalam kelas tes yang memiliki anotasi @Test yang dianggap pengujian bagi runner pengujian. Perhatikan bahwa metode pengujian konvensi tidak termasuk kata “test”.
- Baris pertama addTwoNumbers() memanggil metode add() dari kelas Calculator. Anda hanya bisa menguji metode yang bersifat publik atau dilindungi paket. Dalam hal ini Calculator adalah kelas publik dengan metode publik, jadi semuanya berjalan baik.
- Baris kedua adalah pernyataan untuk pengujian. Pernyataan adalah ekspresi yang harus mengevaluasi dan menghasilkan benar untuk lulus pengujian. Dalam hal ini, pernyataannya adalah bahwa hasil yang Anda dapatkan dari metode penambahan (1 + 1) cocok dengan nomor 2 yang diberikan. Anda akan mempelajari selengkapnya tentang cara membuat pernyataan nanti dalam praktik ini.
Rangkaian sumber adalah kumpulan kode terkait dalam proyek untuk target membangun yang berbeda atau “variasi” lainnya dari aplikasi Anda. Saat Android Studio membuat proyek, Android Studio membuat tiga rangkaian sumber:
- Rangkaian sumber utama, untuk kode dan sumber daya aplikasi Anda.
- Rangkaian sumber pengujian, untuk pengujian unit lokal aplikasi.
- Rangkaian sumber androidTest, untuk pengujian berinstrumen Android.
Menambah dan membuat breakpoint dari d line 111
Menguji aplikasi dan menjalankan aplikasi calculator
3.3 Memeriksa dan memodifikasi variabel
Debugger Android Studio mengizinkan Anda memeriksa status variabel dalam aplikasi saat aplikasi itu berjalan.
- Jalankan aplikasi SimpleCalc dalam mode debug jika belum dijalankan.
- Dalam aplikasi, masukkan dua nomor, salah satunya 42, dan klik tombol Add.
Breakpoint pertama dalam compute() masih dibisukan. Eksekusi berhenti pada breakpoint kedua (pada pernyataan switch), dan debugger muncul.
- perhatikan dalam panel Variables bagaimana variabel operandOne dan operandTwo memiliki nilai yang Anda masukkan ke dalam aplikasi.
- Amati bahwa variabel ini adalah objek MainActivity. Klik panah pengungkapan untuk melihat variabel anggota objek itu.
- Klik kanan variabel operandOne dalam panel Variables, dan pilih Set Value. Anda juga bisa menggunakan F2.
- Ubah nilai operandOne ke 10 dan tekan Return.
- Modifikasi nilai operandTwo ke 10 dengan cara yang sama dan tekan Return.
- Dalam aplikasi, klik tombol Add. Eksekusi menghentikan breakpoint.
- Klik ikon Evaluate Expression , atau pilih Run > Evaluate Expression. Jendela Evaluate Code Fragment muncul. Anda juga bisa mengeklik kanan pada variabel apa pun dan memilih Evaluate Expression.
Gunakan Evaluate Expression untuk menjelajahi status variabel dan objek dalam aplikasi Anda, termasuk metode memanggil pada objek tersebut. Anda bisa memasukkan kode apa pun ke dalam jendela ini.
10.Ketikkan mOperandOneEditText.getHint() ke dalam jendela Expression dan klik Evaluate.
- Jendela Evaluate Expression diperbarui dengan hasil ekspresi itu. Petunjuk untuk EditText ini adalah string “Type Operand 1”, seperti yang awalnya ditetapkan dalam XML untuk EditText yang dimaksud.
Hasil yang Anda dapat dari mengevaluasi ekspresi didasarkan pada status aplikasi saat ini. Tergantung nilai variabel dalam aplikasi saat Anda mengevaluasi ekspresi, Anda mungkin akan mendapatkan hasil yang berbeda.
Perhatikan bahwa jika Anda menggunakan Evaluate Expression untuk mengubah nilai variabel atau properti objek, Anda akan mengubah status berjalan aplikasi.
- Klik Closeuntuk menyembunyikan jendela Evaluate Expression.
3.2: Menguji Aplikasi dengan Pengujian Unit
Tugas 1. Menjelajahi dan menjalankan SimpleCalc di Android Studio
Kodingan di dalam CalculatorTest.java
Modifikasi kodingan di CalculatorTest.java
2.2 Menambahkan pengujian unit untuk metode penghitungan lain
Kodingan Solusi :
CalculatorTest.java
/*
* Copyright 2016, Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the “License”);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an “AS IS” BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.android.SimpleCalc;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.closeTo;
import static org.junit.Assert.assertThat;
/**
* JUnit4 unit tests for the calculator logic. These are local unit tests; no device needed
*/
@RunWith(JUnit4.class)
@SmallTest
public class CalculatorTest {
private Calculator mCalculator;
/**
* Set up the environment for testing
*/
@Before
public void setUp() {
mCalculator = new Calculator();
}
/**
* Test for simple addition
*/
@Test
public void addTwoNumbers() {
double resultAdd = mCalculator.add(1d, 1d);
assertThat(resultAdd, is(equalTo(2d)));
}
@Test
public void addTwoNumbersNegative() {
double resultAdd = mCalculator.add(-1d, 2d);
assertThat(resultAdd, is(equalTo(1d)));
}
@Test
public void addTwoNumbersFloats() {
double resultAdd = mCalculator.add(1.111f, 1.111d);
assertThat(resultAdd, is(closeTo(2.222, 0.01)));
}
@Test
public void subTwoNumbers() {
double resultSub = mCalculator.sub(1d, 1d);
assertThat(resultSub, is(equalTo(0d)));
}
@Test
public void subWorksWithNegativeResult() {
double resultSub = mCalculator.sub(1d, 17d);
assertThat(resultSub, is(equalTo(-16d)));
}
@Test
public void mulTwoNumbers() {
double resultMul = mCalculator.mul(32d, 2d);
assertThat(resultMul, is(equalTo(64d)));
}
@Test
public void divTwoNumbers() {
double resultDiv = mCalculator.div(32d,2d);
assertThat(resultDiv, is(equalTo(16d)));
}
@Test
public void divTwoNumbersZero() {
double resultDiv = mCalculator.div(32d,0);
assertThat(resultDiv, is(equalTo(Double.POSITIVE_INFINITY)));
}
}
3.3: Menggunakan Pustaka Dukungan Android
– Memverifikasi bahwa pustaka dukungan android tersedia
– Menyiapkan Proyek dan memeriksa build.gradle
Menambahkan layout dan warna
Menambahkan warna pada color.xml
Menambahkan perilaku ke MainActivity.java
Tugas 2. Mengimplementasikan perilaku tombol
Menambahkan handler onClick changeButton()
Implementasi Tindakan Tombol
Hasil akhir :
Kodingan solusi:
Activity.main.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<android.support.constraint.ConstraintLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:app=”http://schemas.android.com/apk/res-auto”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
tools:context=”com.example.zahid.hellocompat.MainActivity”>
<TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Hello World!”
android:padding=”16dp”
android:gravity=”center”
android:textSize=”100sp”
android:textStyle=”bold”
app:layout_constraintBottom_toBottomOf=”parent”
app:layout_constraintLeft_toLeftOf=”parent”
app:layout_constraintRight_toRightOf=”parent”
app:layout_constraintTop_toTopOf=”parent” />
<Button
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:paddingTop=”16dp”
android:text=”Change Color”
android:onClick=”changeColor”/>
</android.support.constraint.ConstraintLayout>
Colors.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<resources>
<color name=”colorPrimary”>#3F51B5</color>
<color name=”colorPrimaryDark”>#303F9F</color>
<color name=”colorAccent”>#FF4081</color>
<color name=”red”>#F44336</color>
<color name=”pink”>#E91E63</color>
<color name=”purple”>#9C27B0</color>
<color name=”deep_purple”>#673AB7</color>
<color name=”indigo”>#3F51B5</color>
<color name=”blue”>#2196F3</color>
<color name=”light_blue”>#03A9F4</color>
<color name=”cyan”>#00BCD4</color>
<color name=”teal”>#009688</color>
<color name=”green”>#4CAF50</color>
<color name=”light_green”>#8BC34A</color>
<color name=”lime”>#CDDC39</color>
<color name=”yellow”>#FFEB3B</color>
<color name=”amber”>#FFC107</color>
<color name=”orange”>#FF9800</color>
<color name=”deep_orange”>#FF5722</color>
<color name=”brown”>#795548</color>
<color name=”grey”>#9E9E9E</color>
<color name=”blue_grey”>#607D8B</color>
<color name=”black”>#000000</color>
</resources>
mainActivity.java
package com.example.zahid.hellocompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private String[] mColorArray = {“red”, “pink”, “purple”, “deep_purple”,
“indigo”, “blue”, “light_blue”, “cyan”, “teal”, “green”,
“light_green”, “lime”, “yellow”, “amber”, “orange”, “deep_orange”,
“brown”, “grey”, “blue_grey”, “black”
};
private TextView mHelloTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize the main text view
mHelloTextView = (TextView) findViewById(R.id.hello_textview);
// restore saved instance state (the text color)
if (savedInstanceState != null) {
mHelloTextView.setTextColor(savedInstanceState.getInt(“color”));
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save the current text color
outState.putInt(“color”, mHelloTextView.getCurrentTextColor());
}
public void changeColor(View view) {
Random random = new Random();
String colorName = mColorArray[random.nextInt(20)];
// get the color identifier that matches the color name
int colorResourceName = getResources().getIdentifier(colorName, “color”,
getApplicationContext().getPackageName());
// get the color ID from the resources
int colorRes = ContextCompat.getColor(this, colorResourceName);
// Set the text color
mHelloTextView.setTextColor(colorRes);
}
}
app
apply plugin: ‘com.android.application’
android {
compileSdkVersion 26
defaultConfig {
applicationId “com.example.zahid.hellocompat”
minSdkVersion 14
targetSdkVersion 26
versionCode 1
versionName “1.0”
testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner”
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
}
}
}
dependencies {
implementation fileTree(dir: ‘libs’, include: [‘*.jar’])
implementation ‘com.android.support:appcompat-v7:26.1.0’
implementation ‘com.android.support.constraint:constraint-layout:1.0.2’
testImplementation ‘junit:junit:4.12’
androidTestImplementation ‘com.android.support.test:runner:1.0.1’
androidTestImplementation ‘com.android.support.test.espresso:espresso-core:3.0.1’
}
Recent Comments