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

82 lines
2.3 KiB
Markdown

# 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](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] <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)
```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