2015-09-28 2 views
7

Я разработал SDK для приложений для Android. У нас есть много клиентов, использующих этот SDK там, где есть приложения. Теперь я обновил свой SDK. Я ищу способ, который эти изменения могут отразить в приложении без уточнения там app на play store.Urgent помощь need.Any помощь будет оценена. Спасибо заранее.Продвижение обновления SDK OTA

ответ

4

Ну вы можете динамически загружать файл банка с вашей SD карты с помощью DexLoader класса ... который вы можете обновлять, когда все вы want..on вашего хранилища ... ниже работает код ..

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); 

и в коде файла библиотеки может быть, как это

public class MainActivity { 



public void doSomething() { 

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

скажите мне, если вам нужна помощь

1

нет такого способа для вашей ситуации. Но есть одно, что вы можете сделать, чтобы включить его для следующего обновления. Android может динамически загружать скомпилированный код с DexClassLoader. Итак, вы компилируете новый DEX-файл, а затем заставляете свой SDK загружать и использовать его.

// 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

можете ли вы о признании вины я объясню это немного больше. Я имею в виду, где и как реализовать этот код и как будет проходить поток. Будет ли это работать над воздухом? Спасибо заранее. – 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 –

Смежные вопросы