ase 2016 taming android fragmentation: characterizing and detecting compatibility issues for android...

105
Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps Lili Wei Yepang Liu This image canno t curre S.C. Cheung The Hong Kong University of Science and Technology 05 September 2016

Upload: lili-wei

Post on 13-Apr-2017

195 views

Category:

Mobile


0 download

TRANSCRIPT

Page 1: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Taming Android Fragmentation: Characterizing and Detecting Compatibility

Issues for Android Apps

Lili Wei Yepang Liu

This image cannot curre

S.C. Cheung

The Hong Kong University of Science and Technology

05 September 2016

Page 2: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Android: Popular and Fast-Evolving System

• Fast-evolving: multiple releases every year

2

Page 3: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Android: Popular and Fast-Evolving System

• Fast-evolving: multiple releases every year

• Many different system versions in use:

2

KitKat

Lollipop

Jelly Bean

Ice Cream SandwichGingerbreadFroyo

Marshmallow

https://developer.android.com/about/dashboards/index.html

Page 4: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

3

Page 5: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Huge Number of Device Models

Over 24,000 distinct device models(Aug. 2014 – Aug.2015)

http://opensignal.com/reports/2015/08/android-fragmentation/ 4

Page 6: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Fragmented Android Ecosystem

5

Page 7: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Fragmented Android Ecosystem

5

Page 8: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Fragmented Android Ecosystem

5

Page 9: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Ensuring App Compatibility Is Difficult

• App developers haveto optimize UI of theirapps to fit diversifiedscreen sizes

6

Page 10: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Ensuring App Compatibility is Difficult

• App developers haveto optimize UI of theirapps to fit diversifiedscreen sizes

• An app behavesdifferently acrossdevices

6http://gameovenstudios.com/bounden-on-android-delayed/

Page 11: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Ensuring App Compatibility is Difficult

• App developers haveto optimize UI of theirapps to fit diversifiedscreen sizes

• An app behavesdifferently acrossdevices

6

Fragmentation-induced compatibility issues

http://gameovenstudios.com/bounden-on-android-delayed/

Page 12: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Testing Compatibility Issues

• To fully test compatibility issues is difficult with

huge search space

• Combination of three dimensions

7

Page 13: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Testing Compatibility Issues

• To fully test compatibility issues is difficult with

huge search space

• Combination of three dimensions

7

Device Model

Page 14: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Testing Compatibility Issues

• To fully test compatibility issues is difficult with

huge search space

• Combination of three dimensions

7

APILevel

Device Model

Page 15: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Testing Compatibility Issues

• To fully test compatibility issues is difficult with

huge search space

• Combination of three dimensions

7

APILevel

Device Model

Page 16: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

APILevel

Device Model

Testing Compatibility Issues

• To fully test compatibility issues is difficult with

huge search space

• Combination of three dimensions

7

Page 17: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Existing Work

• Understanding Android fragmentation

• D. Han et al. [WCRE’ 2012]

• T. McDonnell et al. [ICSM’ 2013]

• Prioritize devices to test on:

• H. Khalid et al. [FSE’ 2014]

• X. Lu et al. [ICSE’ 2016]

8

Page 18: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Existing Work

8

None of the existing studies dug into the code level:

• To understand compatibility issues

• To detect compatibility issues

• Understanding Android fragmentation

• D. Han et al. [WCRE’ 2012]

• T. McDonnell et al. [ICSM’ 2013]

• Prioritize devices to test on:

• H. Khalid et al. [FSE’ 2014]

• X. Lu et al. [ICSE’ 2016]

Page 19: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Our Goal

Understand compatibilityissues at code level

9

Page 20: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Our Goal

Understand compatibilityissues at code level

Detect compatibilityissues

9

Page 21: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Research Questions

• RQ1: Issue type and root cause• What are the common types of compatibility issues

in Android apps? What are their root causes?

9

Page 22: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Research Questions

• RQ1: Issue type and root cause• What are the common types of compatibility issues

in Android apps? What are their root causes?

• RQ2: Issue fixing• How do Android developers fix compatibility issues

in practice? Are there any common patterns?

9

Page 23: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Dataset Collection

27 popular, large-scale, well-maintained candidate

apps, which have public issue tracking systems

10

Page 24: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Dataset Collection

27 popular, large-scale, well-maintained candidate

apps, which have public issue tracking systems

10

Apps satisfying these criterion are:• More likely to be affected by different kinds of

compatibility issues• With traceable issue fix and discussions to study

Page 25: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Keyword Searchdevice compatible compatibility samsung

lge sony moto lenovoasus zte google htc

huawei xiaomi android.os.build

11

Page 26: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

VLC r-8e31d57:

Blind fix for mountpoint issues with some Samsung devices

if(line.contains("vfat") || line.contains("exfat") ||- line.contains("/mnt") || line.contains("/Removable")) {+ line.contains("sdcardfs") || line.contains("/mnt") ||+ line.contains("/Removable")) {

Keyword Searchdevice compatible compatibility samsung

lge sony moto lenovoasus zte google htc

huawei xiaomi android.os.build

11

Page 27: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

VLC r-8e31d57:

Blind fix for mountpoint issues with some Samsung devices

if(line.contains("vfat") || line.contains("exfat") ||- line.contains("/mnt") || line.contains("/Removable")) {+ line.contains("sdcardfs") || line.contains("/mnt") ||+ line.contains("/Removable")) {

Keyword Searchdevice compatible compatibility samsung

lge sony moto lenovoasus zte google htc

huawei xiaomi android.os.build

11

CSipSimple r-af0ceea:Fixes issue 498.

+ //HTC evo 4G

+ if(android.os.Build.PRODUCT.equalsIgnoreCase("htc_supersonic")) + return true;

Page 28: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Dataset Collection

12

27 popular, large-scale, well-maintained candidate

apps, which have public issue tracking systems

All 27 apps contain potential revisions related tocompatibility issues

Page 29: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Dataset Collection

Five apps with top number of potential issue-related coderevisions

12

27 popular, large-scale, well-maintained candidate

apps, which have public issue tracking systems

Page 30: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Dataset Collection

Five apps with top number of potential issue-related coderevisions

12

Over 1800 code revisions found in the five apps need tobe manually inspected

27 popular, large-scale, well-maintained candidate

apps, which have public issue tracking systems

Page 31: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Dataset Collection

191 compatibility issues

Five apps with top number of potential issue-related coderevisions (>1800 revisions)

12

27 popular, large-scale, well-maintained candidate

apps, which have public issue tracking systems

Page 32: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Selected Apps

App Name Category Rating Downloads KLOC #Revisions

CSipSimple Communication 4.3/5.0 1M - 5M 59.2 1,778

AnkiDroid Education 4.5/5.0 1M - 5M 58.1 8,282

K-9 Mail Communication 4.3/5.0 5M - 10M 86.7 6,116

VLC Media & Video 4.3/5.0 10M - 50M 28.3 6,868

AnySoftKeyboard Tools 4.3/5.0 1M - 5M 70.7 2,788

13

Page 33: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Data Analysis

API

Identified the issue-inducing

APIs

14

Page 34: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Data Analysis

API

Identified the issue-inducing

APIs

Recovered links between revisions

and reports

14

Page 35: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Data Analysis

API

Identified the issue-inducing

APIs

Recovered links between revisions

and reports

Collected related discussions from

online forums

14

Page 36: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

RQ1: Issue Type and Root Cause

15

Page 37: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

RQ1: Issue Type and Root Cause

15

59%41%

Device-specific issuesCan only be triggered on

certain device models

Non-device-specific issuesCan be triggered under

certain API level

Page 38: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issue

16

Device-specific Issue59%

DriverImplementation

29%

OS Customization19%

Hardware Composition11%

Page 39: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

• Problematic driver implementation

• Different driver implementation can cause

inconsistent app behavior across devices.

17

Page 40: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

• Problematic driver implementation

• Different driver implementation can cause

inconsistent app behavior across devices.

• OS customization

• Manufacturer-customized systems may not fully

comply with the official specifications and thus

cause compatibility issues

17

Page 41: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

• Problematic driver implementation

• Different driver implementation can cause

inconsistent app behavior across devices.

• OS customization

• Manufacturer-customized systems may not fully

comply with the official specifications and thus

cause compatibility issues

• Hardware composition

• Diversified hardware composition of different device

models can cause compatibility issues

17

Page 42: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

• Problematic driver implementation

• Different driver implementation can cause

inconsistent app behavior across devices.

Proximity sensor: Report the distancebetween device and its surrounding object

18

Page 43: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

19

CSipSimple:An Android client app for internet calls

Proximity sensor in CSipSimple:

Used to detect the distance between user’s face and thedevice.

Page 44: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

19

Near

CSipSimple:An Android client app for internet calls

Proximity sensor in CSipSimple:

Used to detect the distance between user’s face and thedevice.

Page 45: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

CSipSimple issue 353:Samsung SPH-M900’s proximity sensor API reports a value inversely proportional to the real distance

19

CSipSimple:An Android client app for internet calls

Proximity sensor in CSipSimple:

Used to detect the distance between user’s face and thedevice.

Page 46: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

CSipSimple issue 353:Samsung SPH-M900’s proximity sensor API reports a value inversely proportional to the real distance

19

CSipSimple:An Android client app for internet calls

Proximity sensor in CSipSimple:

Used to detect the distance between user’s face and thedevice.

Page 47: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

CSipSimple issue 353:Samsung SPH-M900’s proximity sensor API reports a value inversely proportional to the real distance

19

CSipSimple:An Android client app for internet calls

Proximity sensor in CSipSimple:

Used to detect the distance between user’s face and thedevice.

Page 48: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

CSipSimple issue 353:Samsung SPH-M900’s proximity sensor API reports a value inversely proportional to the real distance

19

CSipSimple:An Android client app for internet calls

Proximity sensor in CSipSimple:

Used to detect the distance between user’s face and thedevice.

Page 49: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

• Peculiar hardware composition

SD card variations

20

Page 50: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

• Peculiar hardware composition

SD card variations

20

Page 51: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

• Peculiar hardware composition

SD card variations

20

Page 52: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

• Peculiar hardware composition

SD card variations

20

Page 53: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

• Peculiar hardware composition

SD card variations

Mount points vary across devices20

Page 54: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

VLC:A popular Android video player

21

SD card in VLC:

VLC can play videos stored in the SD card

Page 55: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Device-Specific Issues

VLC:A popular Android video player

21

SD card in VLC:

VLC can play videos stored in the SD card

VLC specifically handle the SD card variations toensure support of different device models

Page 56: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Non-Device-Specific Issue

22

Non-Device-Specific

Issue41%

API Evolution35%

OriginalSystem Bug

6%

Page 57: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Non-Device-Specific Issues

• Android platform API evolution

• Evolving Android system with API introduction,

deprecation and behavior modification causes

compatibility issues

23

Page 58: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Non-Device-Specific Issues

• Android platform API evolution

• Evolving Android system with API introduction,

deprecation and behavior modification causes

compatibility issues

• Original Android system bugs

• Bugs in the system got fixed in newer version while

still existing in older versions can cause

compatibility issues.

23

Page 59: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Non-Device-Specific Issues

AnkiDroid pull request 130

24

API (Added in API Level 16):SQLiteDatabase.disableWriteAheadLogging()

Page 60: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Non-Device-Specific Issues

AnkiDroid pull request 130

24

API (Added in API Level 16):SQLiteDatabase.disableWriteAheadLogging()

API Level< 16

Page 61: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Non-Device-Specific Issues

AnkiDroid pull request 130

24

API (Added in API Level 16):SQLiteDatabase.disableWriteAheadLogging()

API Level< 16

Page 62: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

RQ2: Issue Fixing

• Patch Complexity

• Common Patching Patterns

25

Page 63: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

RQ2: Issue Fixing

• Patch Complexity

• Simple

• Small

26

if (android.os.Build.VERSION.SDK_INT >= 16) {sqLiteDatabase.disableWriteAheadLogging();

}

1. +

2.

3. +

Page 64: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

RQ2: Issue Fixing

• Patch Complexity

• To debug and find a valid fix is not easy

CSipSimple issue 2436:“HTC has closed source this contact/call log app

which makes things almost impossible to debug for me."

27

Page 65: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

RQ2: Issue Fixing

• Common patching patterns

• Check device information (71.7%)

28

Page 66: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

RQ2: Issue Fixing

• Common patching patterns

• Check device information (71.7%)

• Check availability of software and hardware

components (7.3%)

28

Page 67: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

RQ2: Issue Fixing

• Common patching patterns

• Check device information (71.7%)

• Check availability of software and hardware

components (7.3%)

• App-specific workarounds

28

Page 68: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

RQ2: Issue Fixing

• Common patching patterns

• Check device information (71.7%)

• Check availability of software and hardware

components (7.3%)

• App-specific workarounds

Locating the root cause of compatibility issues isdifficult. Whereas, issue fixes are usually simpleand demonstrate common patterns.

28

Page 69: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Applications of the Empirical Findings

• Prioritize testing efforts

APILevel

Device Model

29

Page 70: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

APILevel

Device Model

Applications of the Empirical Findings

• Prioritize testing efforts

Driver-relatedAPI

29

Page 71: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

APILevel

Device Model

Applications of the Empirical Findings

• Prioritize testing efforts

Driver-relatedAPI

29

Page 72: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

APILevel

Device Model

Applications of the Empirical Findings

• Detect compatibility issues

30

Page 73: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

API-Context Pair Model

• Common compatibility issue pattern

31

Compatibility issues are triggered by the improperuse of an Android API (issue-inducing API) in aproblematic software or hardware environment(issue-triggering context)

Page 74: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

API-Context Pair Model

• Common compatibility issue pattern

32

API-Context Pair Model:Each pattern of compatibility issue is modeled as a pairof issue-inducing API and issue-triggering context

Page 75: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

API-Context Pair Model

• Common compatibility issue pattern

32

Context: conjunction of device model, device brand or

API level, etc.

API-Context Pair Model:Each pattern of compatibility issue is modeled as a pairof issue-inducing API and issue-triggering context

Page 76: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

API-Context Pair Model

• Common compatibility issue pattern

API-Context Pair Model:Each pattern of compatibility issue is modeled as a pairof issue-inducing API and issue-triggering context

32

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

Page 77: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

FicFinder: Detecting Compatibility Issues

33

FicFinder:

Fragmentation-Induced Compatibility Issue Finder

Page 78: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

FicFinder: Detecting Compatibility Issues

Android app(.apk or .class)

List ofAPI-context pairs

33

Analysis Report

Page 79: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

FicFinder: Detecting Compatibility Issues

Android app(.apk or .class)

List ofAPI-context pairs

Backward slicing analysisImplemented on top of Soot

25 selected API-context pairs33

Analysis Report

Page 80: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Example

34

void disableWAL() {SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}

db.disableWriteAheadLogging();

}

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

Page 81: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Examplevoid disableWAL() {

SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}

db.disableWriteAheadLogging();

}

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

34

Page 82: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Examplevoid disableWAL() {

SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}

db.disableWriteAheadLogging();

}

AndroidManifest.xml

<uses-sdkandroid:minSdkVersion="15"

/>

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

34

Page 83: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Examplevoid disableWAL() {

SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}

db.disableWriteAheadLogging();

}

AndroidManifest.xml

<uses-sdkandroid:minSdkVersion="15"

/>

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

Slice:

db.disableWriteAheadLogging()

34

Page 84: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Examplevoid disableWAL() {

SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}

db.disableWriteAheadLogging();

}

AndroidManifest.xml

<uses-sdkandroid:minSdkVersion="15"

/>

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

Slice:

db.disableWriteAheadLogging()

34

Page 85: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Examplevoid disableWAL() {

SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}

db.disableWriteAheadLogging();

}

AndroidManifest.xml

<uses-sdkandroid:minSdkVersion="15"

/>

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

Slice:

db.disableWriteAheadLogging()

34

Page 86: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Examplevoid disableWAL() {

SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}

db.disableWriteAheadLogging();

}

AndroidManifest.xml

<uses-sdkandroid:minSdkVersion="15"

/>

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

Slice:

db.disableWriteAheadLogging()

34

Page 87: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Examplevoid disableWAL() {

SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}

db.disableWriteAheadLogging();

}

AndroidManifest.xml

<uses-sdkandroid:minSdkVersion="15"

/>

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

Slice:

db.disableWriteAheadLogging()

SQLiteDatabase db = getDatabase()

34

Page 88: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Examplevoid disableWAL() {

SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}

db.disableWriteAheadLogging();

}

AndroidManifest.xml

<uses-sdkandroid:minSdkVersion="15"

/>

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

Slice:

db.disableWriteAheadLogging()

SQLiteDatabase db = getDatabase()

34

Page 89: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Examplevoid disableWAL() {

SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}if (isJellyBeanOrLater() || isNookHD) {

db.disableWriteAheadLogging();}

}

AndroidManifest.xml

<uses-sdkandroid:minSdkVersion="15"

/>

boolean isJellyBeanOrLater() {return android.os.Build.SDK_VERSION >= 16;

}boolean isNookHD {

return android.os.Build.BRAND.equals("NOOK")&& android.os.Build.PRODUCT.equals("HDplus")&& android.os.Build.DEVICE.equals("ovation");

}

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

Slice:

db.disableWriteAheadLogging()

SQLiteDatabase db = getDatabase()

34

Page 90: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

void disableWAL() {SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}if (isJellyBeanOrLater() || isNookHD) {

db.disableWriteAheadLogging();}

}

ExampleAndroidManifest.xml

<uses-sdkandroid:minSdkVersion="15"

/>

boolean isJellyBeanOrLater() {return android.os.Build.SDK_VERSION >= 16;

}boolean isNookHD {

return android.os.Build.BRAND.equals("NOOK")&& android.os.Build.PRODUCT.equals("HDplus")&& android.os.Build.DEVICE.equals("ovation");

}

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

Slice:

db.disableWriteAheadLogging()

SQLiteDatabase db = getDatabase()

if(isJellyBeanOrLater()||isNookHD)

34

Page 91: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

void disableWAL() {SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}if (isJellyBeanOrLater() || isNookHD) {

db.disableWriteAheadLogging();}

}

Example

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

AndroidManifest.xml

<uses-sdkandroid:minSdkVersion="15"

/>

Slice:

db.disableWriteAheadLogging()

SQLiteDatabase db = getDatabase()

if(isJellyBeanOrLater()||isNookHD)

returnandroid.os.Build.SDK_VERSION >=16

returnandroid.os.Build.BRAND.equals("NOOK")&&android.os.Build.PRODUCT.equals("HDplus")&&android.os.Build.DEVICE.equals("ovation")

boolean isJellyBeanOrLater() {return android.os.Build.SDK_VERSION >= 16;

}boolean isNookHD {

return android.os.Build.BRAND.equals("NOOK")&& android.os.Build.PRODUCT.equals("HDplus")&& android.os.Build.DEVICE.equals("ovation");

}

34

Page 92: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

void disableWAL() {SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}if (isJellyBeanOrLater() || isNookHD) {

db.disableWriteAheadLogging();}

}

Example

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

AndroidManifest.xml

<uses-sdkandroid:minSdkVersion="15"

/>

Slice:

db.disableWriteAheadLogging()

SQLiteDatabase db = getDatabase()

if(isJellyBeanOrLater()||isNookHD)

returnandroid.os.Build.SDK_VERSION >=16

returnandroid.os.Build.BRAND.equals("NOOK")&&android.os.Build.PRODUCT.equals("HDplus")&&android.os.Build.DEVICE.equals("ovation")

boolean isJellyBeanOrLater() {return android.os.Build.SDK_VERSION >= 16;

}boolean isNookHD {

return android.os.Build.BRAND.equals("NOOK")&& android.os.Build.PRODUCT.equals("HDplus")&& android.os.Build.DEVICE.equals("ovation");

}

34

Page 93: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

void disableWAL() {SQLiteDatabase db = getDatabase();if (db.inTransaction()) {

db.endTransaction();}if (isJellyBeanOrLater() || isNookHD) {

db.disableWriteAheadLogging();}

}

Example

API: SQLiteDatabase.disableWriteAheadLogging()

Context: API_level < 16 ∧ Dev_model != "Nook HD"

AndroidManifest.xml

<uses-sdkandroid:minSdkVersion="15"

/>

Slice:

db.disableWriteAheadLogging()

SQLiteDatabase db = getDatabase()

if(isJellyBeanOrLater()||isNookHD)

returnandroid.os.Build.SDK_VERSION >=16

returnandroid.os.Build.BRAND.equals("NOOK")&&android.os.Build.PRODUCT.equals("HDplus")&&android.os.Build.DEVICE.equals("ovation")

boolean isJellyBeanOrLater() {return android.os.Build.SDK_VERSION >= 16;

}boolean isNookHD {

return android.os.Build.BRAND.equals("NOOK")&& android.os.Build.PRODUCT.equals("HDplus")&& android.os.Build.DEVICE.equals("ovation");

}

34

Page 94: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Evaluation

• Subject apps: latest version of 27 popular,

actively-maintained Android apps

• Covering 10 different categories

• At least 5K downloads

App name Category KLOC Rating DownloadsConnectBot Communication 23.0 4.6 1M – 5MAntennaPod Media & Video 65.0 4.5 100K – 500K

c:geo Entertainment 78.8 4.4 1M – 5MAnySoftKeyboard Tools 70.7 4.4 1M – 5M

… … … … …

35

Page 95: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Effectiveness of FicFinder

• Configure FicFinder to report both warnings

and good practices

36

Page 96: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Effectiveness of FicFinder

• Configure FicFinder to report both warnings

and good practices

• FicFinder reported 51 warnings and 79 good

practices

36

Page 97: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Effectiveness of FicFinder

• Configure FicFinder to report both warnings

and good practices

• FicFinder reported 51 warnings and 79 good

practices

46 of the 51 warnings are true positives

(Precision: 90.2%)

36

Page 98: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Effectiveness of FicFinder

• Submitted 14 bug reports

• Bug reports included issue-related discussions,

API guides and possible fixes in the bug reports

to help developers diagnose the issues

37

Page 99: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Effectiveness of FicFinder

• Submitted 14 bug reports

• Bug reports included issue-related discussions,

API guides and possible fixes in the bug reports

to help developers diagnose the issues

8 of the 14 bug reports were

acknowledged by app developers.

5 issues were quickly fixed.

37

Page 100: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Usefulness of FicFinder

• Knowledge of API-context pairs extracted from

our empirical study can be transferred across

different apps

38

AnySoftKeyboard Issue 639:Rule originally extracted from K9 Mail

K9 Mail Issue 1237:Rule originally extracted from CSipSimple

Page 101: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Usefulness of FicFinder

• 4 of the 5 fixed issues were fixed by adopting

our suggested fixes.

Thanks, we will do it as you proposed in out next release. :)Please let us know if you found more of these issues.

iSsO (1Sheeld developer)

39

Page 102: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Usefulness of FicFinder

• 4 of the 5 fixed issues were fixed by adopting

our suggested fixes.

• The other issue was fixed with an alternative

patch, which was semantically equivalent to

our suggested one.

Thanks, we will do it as you proposed in out next release. :)Please let us know if you found more of these issues.

iSsO (1Sheeld developer)

39

Page 103: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Conclusion

• First large-scale empirical study of Android

compatibility issues at code level

• API-context pair to model compatibility issues

• A static analysis tool, FicFinder, to detect

fragmentation-induced compatibility issues

40

Page 104: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Future Work

• Automate API-context pair extraction

• Continue to improve the effectiveness of

FicFinder

41

Page 105: ASE 2016 Taming Android Fragmentation: Characterizing and Detecting Compatibility Issues for Android Apps

Thank you!More information can be found in our paper

Or visit FicFinder’s homepage:

http://sccpu2.cse.ust.hk/ficfinder/

41