1

所以我开始使用 Android Studio,我想为我的项目使用一个数字选择器库。特别是这个:

https://github.com/SimonVT/android-numberpicker

这是一个 Maven 项目,我的项目是基于 gradle 的。为了在我的应用程序中使用这个项目,我需要将它转换成一个 gradle 库项目。简单的!或者我是这么想的……

我使用以下文章作为指导:

http://www.androidsx.com/how-to-link-an-android-library-project-with-gradle-in-android-studio/ http://ryanharter.com/blog/2013/07/17/迁移-android-projects-to-gradle/

我的目录结构如下:

android-numberpicker/
   - android-numberpicker/
      - src/
         - main/
            - res/
            - java/
      - build.gradle
   - settings.gradle
   - build.gradle

我的 settings.gradle 文件

include ':android-numberpicker'

我的 build.gradle 文件:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.3'
    }
}

apply plugin: 'android-reporting'

/**
 * Task to generate a gradle wrapper.
 */
task wrapper(type: Wrapper) {
    gradleVersion = '1.9'
}

我的 android-numberpicker/build.gradle 文件看起来像:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.3'
    }
}

apply plugin: 'android-library'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 15
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 15
    }
}

现在我什至没有尝试将它与我的项目或 android studio 集成。我只是想看看我是否可以自己构建项目。换句话说,我想看看我是否已将项目移植到正确的 gradle 中。但是,当我运行 ./gradlew build (我正在使用 gradle 包装器)时,会出现一系列错误,例如:

NumberPicker.java:48: error: cannot find symbol
import android.view.accessibility.AccessibilityNodeProvider;
                                 ^

不知道为什么 gradle 会这样做?

我确实在原始项目 pom 文件中注意到以下依赖项:

<dependencies>
    <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

我最初忽略了这一点,因为我认为“android-library”插件会自动解析android sdk。但是,当我收到上述错误时,我决定将其添加到我的 android-numberpicker/build.gradle 中,如下所示:

dependencies {
    compile "com.google.android:android:+"
}

我使用了编译,因为 android-library 似乎没有将提供的范围识别为有效范围。运行 ./gradlew build 我得到了一个不同的错误:

错误:Debug 间接依赖于 Android API 级别 15,但变体“调试”的 minSdkVersion 是 API 级别 7

同样,不确定我为什么会收到此错误。在这个问题上已经达到了一堵墙。任何帮助将不胜感激。

干杯

4

2 回答 2

0

根据AccessibilityNodeProvider JavaDoc,该类是在 API 16 中添加的,但是您在构建文件中将 minSdkVersion 设置为 7。

于 2014-01-26T16:04:37.063 回答
0

进行下面提到的所有更正并将您的项目与 gradle 同步。

1) 从您的 build.gradle 文件中删除此依赖项

compile "com.google.android:android:+"

2)应用 android 插件后从android-numberpicker/build.gradle中删除它

 repositories {
    mavenCentral()
 }

没用,你已经在根 gradle 文件中定义了。

3)将android-numberpicker/build.gradle 中的minSdkVersion 和 compileSdkVersion更改为16,因为 API 级别 16 中已添加类

检查这个来回参考 http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeProvider.html

在所有这些更改之后,将您的项目与 gradle 同步,如果您遇到任何问题,请告诉我。

编辑 :

我在 NumberPicker 库代码中找到了这个:

class SupportAccessibilityNodeProvider {

        AccessibilityNodeProviderImpl mProvider;

        private SupportAccessibilityNodeProvider() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                mProvider = new AccessibilityNodeProviderImpl();
            }
        }

        public boolean performAction(int virtualViewId, int action, Bundle arguments) {
            if (mProvider != null) {
                return mProvider.performAction(virtualViewId, action, arguments);
            }

            return false;
        }

        public void sendAccessibilityEventForVirtualView(int virtualViewId, int eventType) {
            if (mProvider != null) mProvider.sendAccessibilityEventForVirtualView(virtualViewId, eventType);
        }
    }

其中显示库为较低版本处理它,因此您可以将 compileSDKVersion 设为 16,将 minSdkVersion 设为 7/8。

还必须在依赖项 iside build.gradle 文件中使用它在您的项目中添加支持 v4 库

compile 'com.android.support:support-v4:19.0.0'
于 2014-01-26T16:13:18.237 回答