build不具合対処ネタ(gradle編)
- はじめに
- local.aarを参照する話
- Uncaught translation SimException: dx.rop.cst.CstInterfaceMethodRef cannot be cast to com.android.dx.rop.cst.CstMethodRef (Proguard)
- TLメモ(gradle)
- TLメモ(java)
はじめに
何度がググって、良く忘れてる対処メモあたりの話。
StackOverFlowで解決策まで載って無くて、試行錯誤で時間よくムダにするんだよなー(汗
local.aarを参照する話
に絡む話
まあこういうパターンもよくあるけど
android gradle
— close_yutori (@kimukou2628) March 30, 2017
jsonpullparser って1.6.9あるみたいなんだけど、mavenに上がってないのな~。
最新化しようとしてエラーでハマったosz
OSSは作者の方のモチベーションで解決されているから途中で飽きてしまうのは仕方ないのかもなー
G様が推奨している方法
これASからIDEで local.aarを参照導入時に自動生成されるものと同じもの
コレのデメリットは、libraryProjectが1個増えてしまうこと
- nend-sdk/build.gradle
configurations.maybeCreate("default") artifacts.add("default", file('nend-sdk-3.2.2.aar'))
- app/build.gradle or libP/build.gradle
dependencies{ compile (project(':nend-sdk')){ exclude group: 'com.android.support' exclude group: 'com.google.android.gms' } }
なにが問題になるの?
- library projectが増える
- build時間ふえる
- instant runが不安定になる
で減らせるなら減らしてね?
といわれるわけです。。
でググってでてきた情報
- app/buid.gradle
apply plugin: 'com.android.application' repositories{ flatDir{ dirs 'libs_aar' } } dependencies { compile(name:'nend-sdk-3.2.2', ext:'aar') }
jarでもイケるらしいです
apply plugin: 'com.android.application' repositories{ flatDir{ dirs 'libs' } } dependencies { compile(name:'myjar-1.0-SNAPSHOT') //省略するとjarを探すらしい }
何時もは下記ですしね・・・
dependencies { compile files('libs/mnist-tools.jar') //★ AS推奨方法らしい<ProjectStructureで補正される書き方> compile fileTree(dir: 'libs', include: '*.jar') }
でググってでてきた情報で対処した方法
DependencyHandler::add をみるとexludeはかけそうです
app/buid.gradle
dependencies { compile(name:'nend-sdk-3.2.2', ext:'aar',{ exclude group: 'com.android.support' exclude group: 'com.google.android.gms' }) }
で問題ないようです。
で本来遣りたかったlibrary projectで試す
apply plugin: ‘com.android.library’
が Interface DependencyHandler のため、口はあるけど実体の対応がないようです。
うーん。library project側が更新されてないみたいだからなー。仕方ないのかも。
library project plugin の最終更新あたりの対応が、下記らへんで最終っぽいからな・・
- libp/build.gradle
apply plugin: 'com.android.library' android{ defaultPublishConfig "debug"//★ publishNonDefault true } dependencies { //★の指定がない時 compile project(path: ':libP', configuration: 'debug') //★の指定がある時 compile project(':libP') }
でもまあぶっちゃけた話
https://docs.gradle.org/current/userguide/java_library_plugin.html
あたりの compileOnly とか出来るかとか試している方が居て
使えなくて爆死してるのTLで見てたりするんですが
apply plugin: 'com.android.application' apply plugin: 'com.android.library'
あたりが、(最新のかどうかも含め?)java pluginとか継承してるの確認してからでないと意味が無い気がする。
G様ぐらいのパワー開発者集団ならbase pluginあたりから全部自前ゴリゴリできそうだしな・・
Uncaught translation SimException: dx.rop.cst.CstInterfaceMethodRef cannot be cast to com.android.dx.rop.cst.CstMethodRef (Proguard)
これ dependenciesの 同名クラスで関数の有無の差分とかある場合に発生。
でも解決策は特に記載なし。
これ依存するライブラリのバージョンが違うとでる
- google play services のバージョン とか
- suppor library とか
MainP | |--- google play service | | | |--- com.android.support //△ | |--- com.android.support | |--- XXX.aar | |--- google play service | | | |--- com.android.support//★ | |--- com.android.support
△と★のバージョン不一致
gradlew :app:dependencies
で調べるとわかったりする話なんですが・・
- exclude宣言で頑張れるか
- うまく行かず
- 直下参照のsupport-library程度ならOK
- その中のさらなるdependenciesには制限かけられない
結局本体側の google play services バージョンを、
共通ライブラリaarを作っている方にお知らせして作り直してもらいました
色々と厳しいな・・と思いつつ*2
TLメモ(gradle)
gradleで面白い事をためそうしていた方が居たのでメモ。
確かにAS重いんで、VSCodeで開発できるならそれでしたいのは正直ある
つい最近のReactNative熱とかってそこら辺もあるんじゃないかなーとか思ったりも
gradleかmavenでwatch的な挙動はできないのかしら。そんなのはIEDの役割?
— tatesuke (@tatesuke) March 28, 2017
@kimukou2628 VSCodeでJavaを書くのを試していて、SpringBootのアプリをホットデプロイできないかなーと思いまして。
— tatesuke (@tatesuke) March 29, 2017
ちょっと調べてみます。有難うございます。
@kimukou2628 `gradle bootRun`をしてその裏でもう一枚ターミナルを立ち上げて`gradle -t assemble`をすると一先ずやりたいことができました
— tatesuke (@tatesuke) March 31, 2017
@kimukou2628 Javaでは普通こういう裏方作業はIDEがやってくれますもんね。ターミナル2枚がダサいんですが、しばらく様子を見てみることにします。
— tatesuke (@tatesuke) March 31, 2017
TLメモ(java)
今更ながら、Java で
— KeithYokoma (@KeithYokoma) March 29, 2017
String val = //...
if (val == null) {
} else switch (val) {
case "foo":
case "bar":
default:
}
という書き方ができることを知ったなど