Android Studio 3 RC1
(Gradle
4、Android Gradle
plugin 3 RC2)に更新した後、アプリがクラッシュします。
This is the error I am having:
Java.lang.RuntimeException: Unable to start activity ComponentInfo{*****}:
Android.view.InflateException: Binary XML file line #0: Binary XML file line #0:
Error inflating class com.viewpagerindicator.CirclePageIndicator
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2817)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2892)
at Android.app.ActivityThread.-wrap11(Unknown Source:0)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1593)
at Android.os.Handler.dispatchMessage(Handler.Java:105)
at Android.os.Looper.loop(Looper.Java:164)
at Android.app.ActivityThread.main(ActivityThread.Java:6541)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.Java:240)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:767)
Caused by: Android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class com.viewpagerindicator.CirclePageIndicator
Caused by: Android.view.InflateException: Binary XML file line #0: Error inflating class com.viewpagerindicator.CirclePageIndicator
Caused by: Java.lang.reflect.InvocationTargetException
at Java.lang.reflect.Constructor.newInstance0(Native Method)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:334)
at Android.view.LayoutInflater.createView(LayoutInflater.Java:647)
at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.createCustomViewInternal(CalligraphyLayoutInflater.Java:211)
at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.access$000(CalligraphyLayoutInflater.Java:20)
at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$PrivateWrapperFactory2.onCreateView(CalligraphyLayoutInflater.Java:302)
at Android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.Java:186)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:780)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:730)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:863)
at Android.view.LayoutInflater.rInflateChildren(LayoutInflater.Java:824)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:866)
at Android.view.LayoutInflater.rInflateChildren(LayoutInflater.Java:824)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:866)
at Android.view.LayoutInflater.rInflateChildren(LayoutInflater.Java:824)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:515)
at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(CalligraphyLayoutInflater.Java:60)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:423)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:374)
at Android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.Java:287)
at Android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.Java:139)
at com.raimbekov.Android.sajde.zikr.ZikrActivity.onCreate(ZikrActivity.Java:195)
at Android.app.Activity.performCreate(Activity.Java:6975)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1213)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2770)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2892)
at Android.app.ActivityThread.-wrap11(Unknown Source:0)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1593)
at Android.os.Handler.dispatchMessage(Handler.Java:105)
at Android.os.Looper.loop(Looper.Java:164)
at Android.app.ActivityThread.main(ActivityThread.Java:6541)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.Java:240)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:767)
Caused by: Java.lang.UnsupportedOperationException: Can't convert value at index 5 to color: type=0x5
10-20 10:48:09.562 6156-6156 E/AndroidRuntime: at Android.content.res.TypedArray.getColor(TypedArray.Java:473)
at com.viewpagerindicator.CirclePageIndicator.<init>(CirclePageIndicator.Java:96)
at com.viewpagerindicator.CirclePageIndicator.<init>(CirclePageIndicator.Java:72)
... 34 more
更新前にこの問題はありませんでした(Android Studio
2で)。 github にも記載されていますが、答えはありません。
変化するcompile 'com.viewpagerindicator:library:2.4.1@aar'
にcompile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'
動作します。ライブラリに問題があります。
私のプロジェクトはAndroid gradle plugin 3.0およびcompileSdk 27を使用しています。このスレッドで推奨ソリューション(compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'
)を使用してこのセットアップで動作させることはできませんでした。
サポートライブラリのバージョン24で追加されたViewPager#removeOnPageChangeListener
などのメソッドが存在しないという不満がありました。ライブラリにAndroid-support-v4.jarが直接焼き付けられていることに関係していると思います。
すべてのxmlファイルを調べて属性をプログラムで設定したくなかったため、最終的にgradleを使用してライブラリをビルドし、compileSdk/minSdk/support-v4をより新しいバージョンにバンプするフォークを作成しました。
ここでプロジェクトを見つけることができます https://github.com/splatte/ViewPagerIndicator
プロジェクトで使用するには、次のようにjitpackから取得します。
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
その後:
dependencies {
implementation 'com.github.splatte:ViewPagerIndicator:3.0.0'
}
(ViewPagerIndicatorが持っている4.300フォークの海でこれを行う別のプロジェクトが必要ですが、見つける方法がわかりませんでした。)
compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'
を使用したjitpack.io
は、Android gradle plugin 3.0。
代わりに、以前にcpi:
(またはapp:
)属性を使用してxmlレイアウトに設定したすべてのビュー属性をプログラムで設定する必要がありました。
例
<com.viewpagerindicator.CirclePageIndicator
cpi:fillColor="@color/Azure"
cpi:pageColor="@color/white"
cpi:radius="4dp"
cpi:snap="true"
cpi:strokeWidth="0dp" />
すべてのcpi:
属性を削除し、プログラムですべて設定しました。
circlePageIndicator.setFillColor(ContextCompat.getColor(getContext(), R.color.Azure));
circlePageIndicator.setPageColor(ContextCompat.getColor(getContext(), R.color.white));
circlePageIndicator.setRadius((int) (4 * Resources.getSystem().getDisplayMetrics().density));
circlePageIndicator.setSnap(true);
circlePageIndicator.setStrokeWidth(0);
jitpack.io
最も簡単な方法:
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
その後:
dependencies {
implementation ('com.github.JakeWharton:ViewPagerIndicator:2.4.1'){
exclude module: 'support-v4'
}
}
Support-v4ライブラリの2つのバージョンがあると、そのうちの1つを除外するまで壊れてしまうことに注意してください。