Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Android dynamic module

519 views

Published on

Published in: Technology, Art & Photos
  • Be the first to comment

Android dynamic module

  1. 1. Android Dynamic Module Lập trình module động trong Android Phí Ngọc Chi – CTO Eway JSC chipn@eway.vn | facebook.com/phingocchi
  2. 2. Cập nhật Ứng Dụng Android APK APK Module v 2.0 Module v 1.0 … … … … ,,, … Server Client
  3. 3. Cập nhật Module APK APK Module v 2.0 Module v 1.0 … … … Server Client
  4. 4. Ưu điểm cập nhật theo Module Mềm dẻo và linh động  Khả năng mở rộng tốt  Đơn giản hóa việc cập nhật với người dùng  Dung lượng cập nhật nhỏ  Tốc độ cập nhật nhanh tức thời 
  5. 5. Dynamic Module   Module được phát triển như một project độc lập và đóng gói thành file module.apk Ứng dụng chính tải file module.apk từ URL  DexClassLoader: thư viện sử dụng để nạp class động từ file module.apk  Java Reflection: khởi tạo object từ class động và tương tác với object để kích hoạt logic thực thi
  6. 6. Module.apk – v2.0 Module … Download Module Load Module DexClassLoader APK Module.apk – v1.0 Java Reflection Quy trình cập nhật Module Load Module Class New Instance Invoke Method Active Module
  7. 7. DemoModule Code public class DemoModule { public void show() { Toast.makeText(getApplicationContext(), "Hi! version 1.0", Toast.LENGTH_SHORT).show(); } } DemoModule.apk - v1.0 public class DemoModule{ public void show() { AlertDialog dialog = new AlertDialog.Builder(this).create(); dialog.setMessage("Hi! version 2.0"); dialog.show(); } } DemoModule.apk – v2.0
  8. 8. Download DemoModule public void downloadDemoModule(Context context) { String dexPath = new File(context.getDir("dex", Context.MODE_PRIVATE), "DemoModule.apk").getAbsolutePath(); //TODO: download DemoModule.apk from URL to dexPath File }
  9. 9. Load DemoModule public DexClassLoader getDemoModuleClassLoader(Context context) { String dexPath = new File(context.getDir("dex", Context.MODE_PRIVATE), "DemoModule.apk").getAbsolutePath(); String optimizedDirectory = context.getDir("temp", 0).toString(); String libraryPath = null; ClassLoader parent ClassLoader = context.getClassLoader(); DexClassLoader dexClassLoader = new DexClassLoader(dexPath, optimizedDirectory, libraryPath, parentClassLoader); return dexClassLoader; }
  10. 10. Active DemoModule DexClassLoader classLoader = this.getDemoModuleClassLoader(this); try { Class<?> demoModuleClass = classLoader.loadClass("com.simple.DemoModule"); Object demoModule = demoModuleClass.newInstance(); demoModuleClass.getMethod("show").invoke(demoModule); } catch (Exception ex) { ex.printStackTrace(); }
  11. 11. DemoModule Screenshot
  12. 12. Thanks for your attention! Phí Ngọc Chi – CTO Eway JSC chipn@eway.vn | facebook.com/phingocchi

×