Android Native Mobile First 依赖太多库?

Posted

技术标签:

【中文标题】Android Native Mobile First 依赖太多库?【英文标题】:Android Native Mobile First depends on too many libs? 【发布时间】:2016-01-21 18:58:08 【问题描述】:

我目前正在研究 Bluemix 和 Mobile First Platform 是否适合我作为我正在开发的 android 应用程序后端的需求。

从一个空的 Android 项目开始,我只成功实现了IBM Push Notification。我关注了这个官方sample。

我的下一步是实现 lib Couchbase Lite for Android(到目前为止,我将使用的数据都放在我自己的 CouchDB 服务中)。为此,我将依赖项添加到 Gradle,因此文件看起来像这样

apply plugin: 'com.android.application'

android 
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig 
        applicationId "es.woozycoder.android.bluemixpayaround"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    
    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    


dependencies 
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'

    compile group: 'com.ibm.mobilefirstplatform.clientsdk.android',
            name:'core',
            version: '1.+',
            ext:'aar',
            transitive: true

    compile group: 'com.ibm.mobilefirstplatform.clientsdk.android',
            name: 'push',
            version: '1.+',
            ext: 'aar',
            transitive: true

    compile 'com.couchbase.lite:couchbase-lite-android:1.1.0'

当我编译并看到以下我认为与too many dependencies 密切相关的错误时,我感到很惊讶。

错误:任务执行失败 ':app:transformClassesWithDexForDebug'。 com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException:进程'命令 'C:\Program Files\Java\jdk1.7.0_72\bin\java.exe'' 完成 非零退出值 2

上面链接的答案表明 Google Play Services 依赖是问题所在,我同意 lib Push 依赖于整个 google-services lib 而不仅仅是特定的(我猜那些会是 gcm (com.google.android.gms:play-services-gcm) 和 base (com.google.android.gms:play-services-base))。

有人知道如何解决这个问题吗?

更新

    这是使用 Android Studio 创建的基于 Gradle 的原生 Android 应用程序。 问题出现在我添加couchbase-lite-android 依赖的那一刻。 我发现 lib googleauthentication 也依赖于整个 lib com.google.android.gms:play-services 而不仅仅是特定的。

更新 2

Here 是 Github 项目。拉它并编译。您会看到它编译并成功运行。但是,现在取消注释模块gradle.build 中的 couchbase-lite 依赖项。现在,构建项目。它会失败。

【问题讨论】:

只有在包含 CouchDB 的最后一个依赖项后才会发生这种情况?您能否成功运行 hello-push 示例? 下班后(这是个人项目)我会将playaround项目推送到Github。我希望这会有所帮助。 【参考方案1】:

您的问题并不清楚您实际上是在开发 Hybrid Android 应用程序还是原生应用程序...

如果您正在开发一个原生应用并向其添加 MFP SDK,那么您应该在 Android Studio 中创建一个基于 Gradle 的 Android 项目。

如果您在 MobileFirst Studio 中开发混合 Android 应用程序,那么您有两种选择:

    如果使用 MPF 7.0/7.1,请尝试添加 ProGuard 支持,这将有助于减少文件数量并可能解决此问题 将生成的Android工程导入Android Studio,转换为基于Gradle的工程,然后添加Google Play Services。当然,下次您将在 MFP Studio 中构建应用程序时,它不会基于 Gradle,因此您必须重复此步骤。

您可能已经猜到了,MFP 目前不支持基于 Gradle 的项目。

【讨论】:

我确实在 Android Studio 中创建了一个基于 Gradle 的 Android 项目。

以上是关于Android Native Mobile First 依赖太多库?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 google_mobile_ads 和 flutter_native_admob 给出错误

react-native实践(基于antd-mobile)

react-native 使用antd-mobile的使用

re学习笔记(91)攻防世界 - mobile进阶区 - Android2.0

为 React (web) 和 React Native (Mobile) 创建单个 npm 包

如何在 Flex Mobile 中访问 *Native* 声音通知或设备“音频”状态?