Android:加载库并仅将其用于开发分支而不是用于发布

时间:2017-04-04 07:45:27

标签: java android gradle android-gradle dynamic-class-loaders

问题陈述: 我想仅在开发环境中使用库,而不是在发布(app store release)上使用。 而且我也不希望该库也可以在apk版本中构建。

我的appraoch:

所以,我有一个像这样的环境设置:

发展 -

  1. 调试
  2. 推出
  3. 商店 -

    1. 调试
    2. 发布 - >这是去商店
    3. 在gradle中我添加了 -

      debugCompile 'com.some.library'
      

      开发 - 调试存储 - 调试

      加载此库

      然后我创建了两个Application类,

      1. ApplicationWithoutDebugLibrary 扩展了MultiDexApplication - 没有初始化库的Application类。
      2. ApplicationWithDebugLibrary 扩展ApplicationWithoutDebugLibrary - 初始化库的应用程序类
      3. 我已经在gradle中定义了为不同的风格加载不同的应用程序文件。

        productFlavors {
                    Development {
                        applicationId "xyzzzz"
                        manifestPlaceholders = [application:"com.xyz.ApplicationWithDebugLibrary"]
                    }
                    store {
                        applicationId "11111"
                        manifestPlaceholders = [application:"com.xyz.ApplicationWithoutDebugLibrary"]
                    }
        }
        

        在清单中我写了这个:

        <application
            android:name="${application}"...
        

        所以,对于Debug它工作正常,但是当我构建Store-Release / Development-Release apk时,它无法编译ApplicationWithDebugLibrary.java,因为我正在使用库,而不是在gradle文件中编译用于发布味道。

        那么,有没有什么方法可以避免为Store发布版本加载这个类,或者我只能在开发环境中加载该库的任何替代解决方案。

1 个答案:

答案 0 :(得分:2)

  

所以对于Debug来说它运行正常,但是当我构建Store-Release / Development-Release apk时,它无法编译ApplicationWithDebugLibrary.java,因为我使用的是库,它不是在gradle文件中编译的,用于发布版本

通过逻辑,没有办法神奇地删除你的代码使用的库,并且仍然可以正确编译所有剩余的代码,因为它们只是缺少符号。所以你必须创造&#34;虚拟&#34;库,与您的调试API具有相同的API,但没有方法体。或者,您可以使用一些代码包装您的lib,这些代码稍后可以与不使用库依赖项的版本交换生产。

Android Gradle插件可以帮助构建不同版本的依赖项,具体取决于构建类型:

  

编译配置用于编译主应用程序。   其中的所有内容都会添加到编译类路径中   打包在最终的APK中。还有其他可能的配置   将依赖项添加到:

     
      
  • 编译:主要应用程序
  •   
  • androidTestCompile:测试应用程序
  •   
  • debugCompile:debug Build Type
  •   
  • releaseCompile:发布Build Type。
  •   

docs:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Dependencies-Android-Libraries-and-Multi-project-setup