automated api usage update for android apps
play

Automated API-Usage Update for Android Apps Mattia Fazzini Qi Xin - PowerPoint PPT Presentation

Automated API-Usage Update for Android Apps Mattia Fazzini Qi Xin Alessandro Orso Mobile Applications Platform Platform Tight Coupling Platforms Change Platforms Change Frequently Android Petit Four Cupcake Donut 1.1 Eclair Froyo


  1. Automated API-Usage Update for Android Apps Mattia Fazzini Qi Xin Alessandro Orso

  2. Mobile Applications

  3. Platform

  4. Platform Tight Coupling

  5. Platforms Change

  6. Platforms Change Frequently Android Petit Four Cupcake Donut 1.1 Eclair Froyo Gingerbread Honeycomb Ice Cream Jelly Bean KitKat Lollipop Marshmallow Nougat Oreo Pie

  7. Adaptive Maintenance Platform New Platform App App Developer

  8. Platform Fragmentation Ice Cream Gingerbread Jelly Bean KitKat Oreo Lollipop Nougat Marshmallow

  9. Intuition Developer B App B Developer A App A Developer C App C

  10. Intuition Developer B App B Developer A App A Developer C App C

  11. Intuition Developer B App B Developer A App A Developer C App C

  12. API Updates API-Usage Changes public NetworkInfo[] getAllNetworkInfo() Old API Usage public NetworkInfo[] getAllNetworkInfo() New API Usage public Network[] getAllNetworks() public NetworkInfo getNetworkInfo(Network network)

  13. API Updates API-Usage Changes public NetworkInfo[] getAllNetworkInfo() Old API Usage public NetworkInfo[] getAllNetworkInfo () New API Usage public Network[] getAllNetworks () public NetworkInfo getNetworkInfo (Network network)

  14. API Updates API-Usage Changes public NetworkInfo[] getAllNetworkInfo() Old API Usage public NetworkInfo[] getAllNetworkInfo () New API Usage public Network[] getAllNetworks () public NetworkInfo getNetworkInfo ( Network network )

  15. API Updates API-Usage Changes public NetworkInfo[] getAllNetworkInfo() Old API Usage public NetworkInfo[] getAllNetworkInfo() New API Usage public Network[] getAllNetworks() public NetworkInfo getNetworkInfo(Network network)

  16. Update Example Update Example Before Update Example After public boolean isConnected(Context cont) { public boolean isConnected(Context cont) { ConnectivityManager cm = ...; ConnectivityManager cm = ... ; NetworkInfo[] info = cm.getAllNetworkInfo(); if (VERSION.SDK_INT >= VERSION_CODES.M) { for (int i = 0; i < info.length; i++) { Network[] networks = cm.getAllNetworks(); if(info[i].isConnected()) { for (Network mNetwork : networks) { return true; NetworkInfo networkInfo = } } cm.getNetworkInfo(mNetwork); Toast.makeText(R.s.noNet).show(); if(networkInfo.isConnected()) { return false; Log.d(networkInfo.getTypeName()); } return true; } } } else { NetworkInfo[] info = cm.getAllNetworkInfo(); for (NetworkInfo anInfo : info) { if(anInfo.isConnected()) { Log.d(anInfo.getTypeName()); return true; } } } Toast.makeText(cont.getString(...)).show(); return false; }

  17. Update Example Update Example Before Update Example After public boolean isConnected(Context cont) { public boolean isConnected(Context cont) { ConnectivityManager cm = ...; ConnectivityManager cm = ... ; NetworkInfo[] info = cm.getAllNetworkInfo(); if (VERSION.SDK_INT >= VERSION_CODES.M) { for (int i = 0; i < info.length; i++) { Network[] networks = cm.getAllNetworks(); if(info[i].isConnected()) { for (Network mNetwork : networks) { return true; NetworkInfo networkInfo = } } cm.getNetworkInfo(mNetwork); Toast.makeText(R.s.noNet).show(); if(networkInfo.isConnected()) { return false; Log.d(networkInfo.getTypeName()); } return true; } } } else { NetworkInfo[] info = cm.getAllNetworkInfo(); for (NetworkInfo anInfo : info) { if(anInfo.isConnected()) { Log.d(anInfo.getTypeName()); return true; } } } Toast.makeText(cont.getString(...)).show(); return false; }

  18. Update Example Update Example Before Update Example After public boolean isConnected(Context cont) { public boolean isConnected(Context cont) { ConnectivityManager cm = ...; ConnectivityManager cm = ... ; NetworkInfo[] info = cm.getAllNetworkInfo(); if (VERSION.SDK_INT >= VERSION_CODES.M) { for (NetworkInfo anInfo : info) { Network[] networks = cm.getAllNetworks(); if(info[i].isConnected()) { for (Network mNetwork : networks) { return true; NetworkInfo networkInfo = } } cm.getNetworkInfo(mNetwork); Toast.makeText(R.s.noNet).show(); if(networkInfo.isConnected()) { return false; Log.d(networkInfo.getTypeName()); } return true; } } } else { NetworkInfo[] info = cm.getAllNetworkInfo(); for (NetworkInfo anInfo : info) { if(anInfo.isConnected()) { Log.d(anInfo.getTypeName()); return true; } } } Toast.makeText(cont.getString(...)).show(); return false; }

  19. Update Example Update Example Before Update Example After public boolean isConnected(Context cont) { public boolean isConnected(Context cont) { ConnectivityManager cm = ...; ConnectivityManager cm = ... ; NetworkInfo[] info = cm.getAllNetworkInfo(); if (VERSION.SDK_INT >= VERSION_CODES.M) { for (NetworkInfo anInfo : info) { Network[] networks = cm.getAllNetworks(); if(info[i].isConnected()) { for (Network mNetwork : networks) { return true; NetworkInfo networkInfo = } } cm.getNetworkInfo(mNetwork); Toast.makeText( R.s.noNet ).show(); if(networkInfo.isConnected()) { return false; Log.d(networkInfo.getTypeName()); } return true; } } } else { NetworkInfo[] info = cm.getAllNetworkInfo(); for (NetworkInfo anInfo : info) { if(anInfo.isConnected()) { Log.d(anInfo.getTypeName()); return true; } } } Toast.makeText( cont.getString(...) ).show(); return false; }

  20. A PP E VOLVE Overview Update and Find update Abstract update Identify API validate API usages requiring examples for examples into update in target usages in target identified API generic update app app based on usages patches and patches rank them

  21. A PP E VOLVE Overview Update and Find update Abstract update Identify API validate API usages requiring examples for examples into update in target usages in target identified API generic update app app based on usages patches and patches rank them

  22. A PP E VOLVE Overview Update and Find update Abstract update Identify API validate API usages requiring examples for examples into update in target usages in target identified API generic update app app based on usages patches and patches rank them

  23. Update Example Search Code Hosting Infrastructure Keyword-Based Search method ∈ ∀ New API Usage signature method name, param types, declaring class Search Result Code Base App 2 Code Base App 1 Code Base App 3 Code Base App 4 f 1 i − n f 2 j − 1 f 4 k − 1 f 1 i − 1 f 2 j f 4 k f 1 i

  24. Update Example Search Code Hosting Infrastructure Keyword-Based Search method ∈ ∀ New API Usage signature method name, param types, declaring class Search Result Search Result Code Base App 2 Code Base App 2 Code Base App 1 Code Base App 1 Code Base App 3 Code Base App 3 Code Base App 4 Code Base App 4 f 1 i − n f 1 i − n f 2 j − 1 f 2 j − 1 f 4 k − 1 f 4 k − 1 f 1 i − 1 f 1 i − 1 f 2 j f 2 j f 4 k f 4 k f 1 i f 1 i

  25. Update Example Search Code Hosting Infrastructure Keyword-Based Search method ∈ ∀ New API Usage signature method name, param types, declaring class Search Result Search Result Code Base App 2 Code Base App 2 Code Base App 1 Code Base App 1 Code Base App 3 Code Base App 3 Code Base App 4 Code Base App 4 f 1 i − n f 1 i − n f 2 j − 1 f 2 j − 1 f 4 k − 1 f 4 k − 1 f 1 i − 1 f 1 i − 1 f 2 j f 2 j f 4 k f 4 k f 1 i f 1 i

  26. Update Example Search Before Update After Update ( f 1 i − 1 ) ( f 1 i ) public boolean isConnected(Context cont) { public boolean isConnected(Context cont) { ConnectivityManager cm = ...; ConnectivityManager cm = ... ; NetworkInfo[] info = cm.getAllNetworkInfo(); if (VERSION.SDK_INT >= VERSION_CODES.M) { for (int i = 0; i < info.length; i++) { Network[] networks = cm.getAllNetworks(); if(info[i].isConnected()) { for (Network mNetwork : networks) { return true; NetworkInfo networkInfo = } } cm.getNetworkInfo(mNetwork); Toast.makeText(R.s.noNet).show(); if(networkInfo.isConnected()) { return false; Log.d(networkInfo.getTypeName()); } return true; } } } else { NetworkInfo[] info = cm.getAllNetworkInfo(); for (NetworkInfo anInfo : info) { if(anInfo.isConnected()) { Log.d(anInfo.getTypeName()); return true; } } } Toast.makeText(cont.getString(...)).show(); return false; }

  27. Update Example Search Compute Differences Before Update After Update ( f 1 i − 1 ) ( f 1 i ) public boolean isConnected(Context cont) { public boolean isConnected(Context cont) { ConnectivityManager cm = ...; ConnectivityManager cm = ... ; - NetworkInfo[] info = cm.getAllNetworkInfo(); + if (VERSION.SDK_INT >= VERSION_CODES.M) { - for (int i = 0; i < info.length; i++) { + Network[] networks = cm.getAllNetworks(); - if(info[i].isConnected()) { + for (Network mNetwork : networks) { return true; + NetworkInfo networkInfo = } } + cm.getNetworkInfo(mNetwork); - Toast.makeText(R.s.noNet).show(); + if(networkInfo.isConnected()) { return false; + Log.d(networkInfo.getTypeName()); } return true; } } + } else { + NetworkInfo[] info = cm.getAllNetworkInfo(); + for (NetworkInfo anInfo : info) { + if(anInfo.isConnected()) { + Log.d(anInfo.getTypeName()); + return true; + } } + } + Toast.makeText(cont.getString(...)).show(); return false; }

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend