[英]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.