# App Optimisation, Testing & Deployment ### Check Memory Usage - `abd shell dumpsys meminfo ` - 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](img/cc.png) - 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` ```groovy 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) ```sh $ adb shell monkey [options] $ 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) ```groovy buildTypes { release { minifyEnable true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } ``` Can try `proguard-android-optimize.txt` for more code shrinking