从 Eclipse 移植和升级 Android 个库

Porting from Eclipse and Upgrading Android Libraries

我有一个 Android 应用程序,多年来我们一直在 Eclipse 中构建它,我终于将它移植到 Android Studio(我是 Android Studio 的新手并且 Gradle,所以请原谅我的无知)。我已经成功移植它并且应用程序已启动并且 运行 在 Android Studio 中,但现在需要克服更多的障碍:

  1. 我想升级已弃用的方法,并移动到最新版本的支持库、Google 服务和 GSon(如果需要,我想我可以不升级 GSon)。

  2. 使事情复杂化的是,我们有一个基于 Ant 的构建,它获取源代码并生成大量白标签应用程序实例,并进行一些相当复杂的替换。我打算保留它 - 我现在还不想 Gradle(并且不确定 Gradle 可以处理吗?)。

因此,首先看起来我的 Gradle 由端口生成的依赖项如下:

apply plugin: 'com.android.application'
android {
    compileSdkVersion 23
    buildToolsVersion "25.0.2"

    defaultConfig {
            applicationId "com.mydomain.myapp"
            minSdkVersion 14
            targetSdkVersion 23
            compileOptions {
                sourceCompatibility JavaVersion.VERSION_1_7
                targetCompatibility JavaVersion.VERSION_1_7
            }
        }

        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            }
        }
    }

    dependencies {
        compile 'com.android.support:support-v4:23.4.0'
        compile 'com.google.code.gson:gson:2.2.4'
        compile 'com.google.android.gms:play-services:+'
        [....other dependencies that don't matter here....]
    }

我的问题是:我是否仍需要在此处安装这些库的升级版本,还是通过 Gradle 添加 运行 出 Android Studio?如果不是通过列出的 lib 依赖项,我如何让 Ant 构建在我完成这些升级后选择这些升级?我确实有一个更复杂的问题,因为我认为生成的源代码结构与 Eclipse 不同,但我认为我可以相应地调整 Ant 构建。

我已经阅读了这些内容,虽然确实有帮助但并没有完全回答我的问题:

谢谢!


更新

经过大量尝试,我终于升级了模块和库,显然(我需要做大量测试)可以正常工作。不确定这是否会在未来任何时候拯救任何人,但关键似乎是:

  1. 匹配compileSdkVersion和buildToolsVersion版本。
  2. 尽可能匹配 com.android.support:support and compile and tools 版本。
  3. 对于 Support lib,选择刚好低于您的 minSDK 版本的版本(在我的例子中是 14,所以我选择了 v13)。我可能在那里错了,但这就是它对我有用的原因。
  4. 请注意您引入的模块和模块的版本,并且它们是兼容的。该工具在警告方面做得不错,但是如果您要引入整个播放服务,我建议您引入各个部分,因为那是我的不兼容性的来源。这是现在的样子:

    应用插件:'com.android.application' android{ 编译SDK版本25 buildToolsVersion '25.0.2'

    defaultConfig {
        applicationId "com.mydomain.myapp"
        minSdkVersion 14
        targetSdkVersion 23
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        }
    }
    
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    }
    
    dependencies {
        compile 'com.google.android.gms:play-services-maps:11.0.4'
        compile 'com.android.support:support-v13:25.3.1'
        compile 'com.google.code.gson:gson:2.7'
    }
    

对于发现整个支持库令人困惑和一团糟的人(为什么会有人这么想?)这个博客非常有帮助:

http://martiancraft.com/blog/2015/06/android-support-library/

还要感谢 Gabriele Mariotti 为我指明了正确的方向。我将在另一个问题中解决白标转换为 Gradle 的问题。如果我有这一切不正确请插话...我将是第一个承认这一切都非常混乱!

My question is : do I still need to have the upgraded versions of these libs here or is this done via a Gradle addition for running out Android Studio?

compile 'com.android.support:support-v4:23.4.0'
compile 'com.google.android.gms:play-services:+'
  • 使用最新版本总是一个好主意

  • 你应该避免在你的依赖中使用通配符+,因为这样你就不能在不同的时间复制相同的构建(因为它会随着时间的推移而改变) .

  • 使用相同版本的支持库。 gms 库与 support-v4 有依赖关系,您应该使用相同的版本。

  • 拥有所有 gms 模块并不是一个好主意(com.google.android.gms:play-services)。您可以只添加所需的模块。

And if not by lib dependencies as listed, how can I have the Ant build pick these upgrades once I make them?

没那么简单。在我看来,您应该在 gradle 中转换您的 ant 脚本。这样会更容易。