【问题标题】:Rolling out update of SDK OTA推出 SDK OTA 更新
【发布时间】:2015-12-25 07:15:27
【问题描述】:

我已经为 android 应用程序开发了一个 SDK。我们有很多客户在应用程序中使用这个 SDK。现在我已经更新了我的 SDK。我正在寻找一种方法,这些更改可以在应用程序中反映出来,而无需在播放时更新应用程序商店。需要紧急帮助。任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: android sdk android-sdk-tools


    【解决方案1】:

    您可以使用 DexLoader 类从您的 SD 卡动态加载一个 jar 文件...您可以随时更新...在您的存储...下面是工作代码..

      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.");
    }}
    

    如果您需要任何帮助,请告诉我

    【讨论】:

      【解决方案2】:

      你的情况没有这样的方法。但是您可以做一件事来为下一次更新启用它。 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) { ... }
      

      【讨论】:

      • 你能解释一下吗?我的意思是在哪里以及如何实现此代码以及流程将如何进行。这可以在空中播放吗?提前致谢。
      • @HarrySharma, google.com.ua/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多