Files
notes/docs/lectures/mdp/16_app_testing.md
T

2.3 KiB

App Optimisation, Testing & Deployment

Check Memory Usage

  • abd shell dumpsys meminfo <package_name>
    • Check if memory size increased since launch
    • Number of objects that have been created
    • Database information
  • Terminology:
    • Native Heap: memory used by the process itself
    • Dalvik Heap: memory allocated by DalvikVM
    • Dalvik Other: memory used for JIT
    • Pss total: all connections to the main device memory thread
    • Private dirty: actual amount of RAM the app is using on the heap since the app started

Code Optimisation

  • Minimise object creation
  • Make a method static if there is no need to modify the state of an object
  • Make any constants static final
  • Int is 2x faster than float
  • Use enhanced for loops (for-each instead of regular for loops)

App Testing

image-20220118165511824

  • Generally, developing tests is done before developing code

Unit Tests

  • Build unit tests to verify the logic of specific code in the app
  • Local tests
    • run on the local Java VM
  • Instrumented tests
    • run based on the Android dependencies
    • Can use mockito or robolectric to isolate a unit from its dependencies

UI Tests

  • Test an entire sequence of events, user interface, end-to-end testing on emulators & devices

  • Tools: AndroidJUnitRunner & Espresso API & UI Automator

  • Modify build.gradle

    dependencies{
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    }
    
  • Espresso records UI interactions and can use these to run a repeatable test automatically

Monkey (stress test)

  • Runs on an emulator and generates pseudo-random streams of user events (clicks, touches, gestures and system-level events)
$ adb shell monkey [options] <event-count>
$ adb shell monkey -p your.package.name -v 500

APK Generation

  • Use a good / unique package name
    • [org/com].[company].[product].[component]
  • Build -> Generate Signed APK
Shrink Code & Resources (Proguard)
buildTypes {
    release {
        minifyEnable true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

Can try proguard-android-optimize.txt for more code shrinking