繁体   English   中英

gradle如何在android studio中实际工作?

[英]How does gradle actually work in android studio?

好的,上面的问题的确确实泛泛而广,但是我有这种困惑需要清除。

我正在用很少的自定义xml动画在android中建立一个项目,其中一个是我从https://github.com/nirhart/ParallaxScroll获得的视差滚动视图,他告诉我导入行compile 'com.github.nirhart:parallaxscroll:1.0'我做过的compile 'com.github.nirhart:parallaxscroll:1.0'和o分别下载了其类,然后使用视差视图,我必须将视图定义为

<com.example.hasan.jsoncountries.ParallaxScrollView
....
...
</com.example.hasan.jsoncountries.ParallaxScrollView>

这让我使用视差类。

现在,如果我尝试注释掉ParallaxScrollView类,则有时会出现错误或有时会起作用。

现在我的问题是,在导入gradle命令之后,我们是否需要单独下载java类文件?

这是我的build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.hasan.jsoncountries"
        minSdkVersion 21
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.balysv:material-ripple:1.0.2'
    compile 'com.android.support:cardview-v7:21.0.+'
    compile 'com.android.support:recyclerview-v7:21.0.+'
    compile 'com.android.support:appcompat-v7:21.+'
    compile 'com.jakewharton:butterknife:6.0.0'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.github.ksoichiro:android-observablescrollview:1.2.0'
    compile 'com.android.support:appcompat-v7:21.0.2'
    compile 'com.getbase:floatingactionbutton:1.7.0'
    compile 'com.android.support:design:22.2.0'

    compile 'com.github.nirhart:parallaxscroll:1.0'

}

在我评论了ParallaxScrollView.Java之后

我在logcat中得到这个。

06-17 19:06:39.084  25611-25611/com.example.hasan.jsoncountries E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.hasan.jsoncountries, PID: 25611
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hasan.jsoncountries/com.example.hasan.jsoncountries.SingleItemView}: android.view.InflateException: Binary XML file line #1: Error inflating class com.example.hasan.jsoncountries.ParallaxScrollView
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: android.view.InflateException: Binary XML file line #1: Error inflating class com.example.hasan.jsoncountries.ParallaxScrollView
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:757)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378)
            at android.app.Activity.setContentView(Activity.java:2145)
            at com.example.hasan.jsoncountries.SingleItemView.onCreate(SingleItemView.java:27)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.hasan.jsoncountries.ParallaxScrollView" on path: DexPathList[[zip file "/data/app/com.example.hasan.jsoncountries-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
            at android.view.LayoutInflater.createView(LayoutInflater.java:571)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378)
            at android.app.Activity.setContentView(Activity.java:2145)
            at com.example.hasan.jsoncountries.SingleItemView.onCreate(SingleItemView.java:27)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
    Suppressed: java.lang.ClassNotFoundException: com.example.hasan.jsoncountries.ParallaxScrollView
            at java.lang.Class.classForName(Native Method)
            at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
            at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 22 more
     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

现在我的问题是,在导入gradle命令之后,我们是否需要单独下载java类文件?

绝对没有 gradle的一大优点是Maven的使用。

Maven是一个中央存储库系统(有MavenCentral,还有其他),因此,当您输入所需库的完整规范(在您的情况下, compile 'com.github.nirhart:parallaxscroll:1.0' )时,gradle将下载中央存储库中特定版本上的该库。

如果所需的库位于其他存储库中,通常会在其git页面上找到告诉您要添加到gradle文件中的其他buildscript->respository repository的信息。

这意味着,您要做的就是添加compile行,然后单击图标以在Android Studio中更新gradle构建脚本,这将触发读取build.gradle文件并下载任何必要库的过程。 这些将下载到gradle缓存目录中。

因此,我的建议是:删除,删除您放在项目上的所有已下载类,并让gradle发挥其美感。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM