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