Android dynamic module

401 views
287 views

Published on

Published in: Technology, Art & Photos
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
401
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

×