2015-09-28 13 views
7

Tôi đã phát triển SDK cho ứng dụng android.Chúng tôi có nhiều khách hàng sử dụng SDK này trong các ứng dụng đó. Tôi đã cập nhật SDK của mình. Tôi đang tìm cách để những thay đổi này có thể phản ánh trong ứng dụng đó mà không cần cập nhật có ứng dụng trên cửa hàng chơi.Urgent trợ giúp cần thiết. Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn trước.Ra mắt bản cập nhật SDK OTA

Trả lời

4

Vâng, bạn có thể tự động tải một file jar từ thẻ SD của bạn sử dụng DexLoader lớp ... mà bạn có thể cập nhật khi đã bao giờ bạn want..on lưu trữ của bạn ... dưới đây đang làm việc mã ..

final String libPath = Environment.getExternalStorageDirectory() +  "/test.jar"; 
    final File tmpDir = getDir("dex", 0); 

    final DexClassLoader classloader = new DexClassLoader(libPath, tmpDir.getAbsolutePath(), null, this.getClass().getClassLoader()); 
    final Class<Object> classToLoad = (Class<Object>) classloader.loadClass("com.test.android.MainActivity"); 

    final Object myInstance = classToLoad.newInstance(); 
    final Method doSomething = classToLoad.getMethod("doSomething"); 



    doSomething.invoke(myInstance); 

và trong mã tập tin thư viện của bạn có thể được như thế này

public class MainActivity { 



public void doSomething() { 

Log.e(MainActivity .class.getName(), "MainActivity : doSomething() called."); 
}} 

cho tôi biết nếu bạn cần bất kỳ sự trợ giúp

1

không có cách nào cho tình huống của bạn. Nhưng có một điều bạn có thể làm để kích hoạt nó để cập nhật tiếp theo. Android có thể tự động tải mã được biên dịch bằng DexClassLoader. Vì vậy, bạn biên dịch một tệp DEX mới, sau đó buộc SDK của bạn tải xuống và sử dụng nó.

// Internal storage where the DexClassLoader writes the optimized dex file to 
    final File optimizedDexOutputPath = getDir("outdex", Context.MODE_PRIVATE); 
    DexClassLoader cl = new DexClassLoader(dexInternalStoragePath.getAbsolutePath(), 
             optimizedDexOutputPath.getAbsolutePath(), 
             null, 
             getClassLoader()); 
    Class libProviderClazz = null; 
    try { 
     // Load the library. 
     libProviderClazz = 
      cl.loadClass("com.example.dex.lib.LibraryProvider"); 
     // Cast the return object to the library interface so that the 
     // caller can directly invoke methods in the interface. 
     // Alternatively, the caller can invoke methods through reflection, 
     // which is more verbose. 
     LibraryInterface lib = (LibraryInterface) libProviderClazz.newInstance(); 
     lib.showAwesomeToast(this, "hello"); 
    } catch (Exception e) { ... } 
+0

Can bạn lời biện hộ se giải thích thêm một chút. Tôi có nghĩa là ở đâu và làm thế nào để thực hiện mã này và làm thế nào dòng chảy sẽ đi. điều này sẽ làm việc qua không khí? Cảm ơn trước. – Scorpio

+0

@HarrySharma, https://www.google.com.ua/webhp?sourceid=chrome-instant&ion=1&espv=2&es_th=1&ie=UTF-8#q=android%20dexclassloader%20example&es_th=1 –

Các vấn đề liên quan