レガシーな環境でのテスト環境構築メモ
はじめに
Javaの認識度が低い?*1アホな環境縛りでハマったので備忘メモ
まあ一番いいのは仕事場を変えることなんだけどね・・
大企業のお仕事ってこんなとこばかりだから転職する人多いんだろうなーとか思いつつ
動作環境
- Windows 10
- 8G
- AS 2.3.3 / AS 3.0
縛り環境
- gradle plugin 2.2.3
- gradle runtime-2.14.1-bin
G様推奨環境
- gradle plugin 2.3.3/gradle plugin 3.0.0
- gradle runtime-4.1-bin
状況的な話
android
— close_yutori (@kimukou2628) 2017年10月30日
gradle plugin versionとtest library version
の対応表どっかないかな、、(汗
build.gradleを弄る権限が政治的に強いとこしか弄れなくて
それでもtestコード出来るだけ書きましょう
とかいうよく分からん状態
ご愁傷様な何かだにゃ(T_T)
— 非実在naka aki (@naka_aki_spl) 2017年10月30日
ああああorz
— 非実在naka aki (@naka_aki_spl) 2017年10月30日
最終的にマージして動かさないといけない?条件下
お客さんの子会社が作ったサンプルの環境らしい。
そのまま作成分を追加してデモ動かしたいみたいな状況
- gradle-experimental:0.7.2
- gradle plugin 2.2.3
書き方は下記のページ参照
これAS2.1〜2.2時代に流行った独自NDK DSLなので*2
data-bindingが動かないというStackOverFlowを見たので検証が必要な気がする。あとで追記予定
android.dataBinding {
enabled true
}
なのが出てきた・・・
=> 上記DSL動きませんでしたorz。stackoverflowの動いた例の
apply plugin: "android.databinding" が既にサポートされてない罠
on gradle-experimental:0.7.2
追記
packageOptionの記述でハマったのでメモ
お客さんがandroidの標準ライブラリ以外はNDKがほとんどだったので、記載自体がなく
外部ライブラリ追加時点でハマりましたorz*3
model { android { // package除外は多少法則が乱れる。ややこしい。 packagingOptions.with { exclude 'LICENSE.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE' exclude 'androidannotations-api.properties' exclude 'services/com.fasterxml.jackson.core.JsonFactory' exclude 'services/com.fasterxml.jackson.core.ObjectCodec' } } }
そもそもの話
- ndkも独自プラグインだと動作安定しないから標準に統合 on 2.3
- Java8もJackがうまく動かないから標準に統合 on 3.0
の流れなんだけどな・・古いまま提供されている時点で、
大本のお客さん側に作った人が既に居ないとかいうオチもたまにあるのでこの業界結構怖い(汗
- root/build.gradle
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle-experimental:0.7.2' //バージョンは後で再確認!! classpath "com.android.tools.build:gradle:2.2.3" //△何でこの記載が有るんだろう?? } }
△ これ調べたら、mix環境じゃないと動かないlibraryが多いみたいで
- gradle-experimental
- android gradle plugin通常
- 順番逆にするとエラーになる
の両参照で回避したというgithubのissueが引っかかるのが凄く香ばしい。
しかもバージョンにより動いたり動かなかったりがあるとのこと。
でも提供サンプルの記載見る限り javaのdependenciesが殆ど無い*4ので怖すぎるんだよね
- app/build.gradle
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.4.0' testCompile 'junit:junit:4.12' }
これ、お客さん提供のサンプルのbuild.gradleをいじれない想定*5だとすると
libsにjar突っ込んで回避とか考えてたりするんですかね?*6
- app/build.gradle
model { android{ compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { minSdkVersion 23 targetSdkVersion 23 } }
ローカルでとりあえず構築した条件下
gradle plugin 2.2.3
root/build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:2.2.3"
}
}
- app/build.gradle
android{ compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { minSdkVersion 23 targetSdkVersion 23 } }
- gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-bin.zip
追加してみたテストモジュール設定
- app/build.gradle
dependencies { androidTestCompile ('com.android.support.test.espresso:espresso-core:2.2.2') { exclude group: 'com.android.support' } androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.2') { exclude group: 'com.android.support' } androidTestCompile ("com.android.support.test:runner:0.5"){ exclude group: 'com.android.support' } androidTestCompile ("com.android.support.test:rules:0.5"){ exclude group: 'com.android.support' } androidTestCompile "com.android.support:support-annotations:23.4.0" compile 'com.android.support:appcompat-v7:23.4.0' //◎◎ }
- ◎◎は一番下に。appcompat入れると support-library系のdependenciesはすべて入る感じ
最新のバージョンは動きません><。下記辺りで引っかかる
- gradle runtime
- build-tools
gradle plugin 2.3.3 以上の本来の書き方
まあ公式 大分3.0ベースに書き直されてきているので、この環境も厳しくなるんですけどね(汗
- root/build.gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:2.3.3"
}
}
- app/build.gradle
android{ compileSdkVersion 26 //★本来のベキ論環境 buildToolsVersion "26.0.2" //★本来のベキ論環境 defaultConfig { minSdkVersion 23 targetSdkVersion 23 } } dependencies { androidTestCompile ('com.android.support.test.espresso:espresso-core:3.0.1') { exclude group: 'com.android.support' } androidTestCompile ('com.android.support.test.espresso:espresso-contrib:3.0.1') { exclude group: 'com.android.support' } androidTestCompile ("com.android.support.test:runner:1.0.1"){ exclude group: 'com.android.support' } androidTestCompile ("com.android.support.test:rules:1.0.1"){ exclude group: 'com.android.support' } androidTestCompile ('com.android.support.test.uiautomator:uiautomator-v18:2.1.2'){ exclude group: 'com.android.support' } androidTestCompile "com.android.support:support-annotations:26.1.0" compile 'com.android.support:appcompat-v7:26.1.0' //◎◎ }
その他の依存plugin
gradle runtime 3.3 / build tools 25.0.0 upper言われる
root/build.gradle
buildscript { repositories { jcenter() maven { url "https://plugins.gradle.org/m2/" } maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } maven { url "https://jitpack.io" } google() } dependencies { classpath 'com.github.gfx.ribbonizer:ribbonizer-plugin:2.1.0' classpath 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.10' } }
これPlugin作る時に指定できるのかなー(汗
java8 runtime依存なエラーが出た
root/build.gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath "de.mannodermaus.gradle.plugins:android-junit5:1.0.11"
}
}
- app/build.gradle
apply plugin: "com.android.application" apply plugin: "de.mannodermaus.android-junit5" dependencies { testCompile junit5() testCompile junit5Params() // (Optional) For running tests inside Android Studio 3.x (see below for details) provided junit5EmbeddedRuntime()//◎ }
- ◎コメントしてても2.2.3 駄目。逆に違うエラーが出る感じ
- 2.3.3 では◎も問題なし
だいじょうぶだったPlugin
- root/build.gradle
buildscript { dependencies { classpath ('com.hujiang.aspectjx:gradle-android-plugin-aspectjx:1.0.11',{ exclude module 'junit' //★★ test実行時に干渉する>< }) }
- app/build.gradle
dependencies{
compile "org.robolectric:robolectric:3.4.2"
}
でココまで頑張って構築して、ローカルでテストしてるものの・・
Cかどうかの問題ではないと信じたいです。(いや、信じたところで結局なにも得られませんがorz
— 非実在naka aki (@naka_aki_spl) 2017年10月31日
と、C用のxUnitもどきを閉鎖環境で自力で(bash系ツールを使って)自作した垢が申しております。
ですね~。
— close_yutori (@kimukou2628) 2017年10月31日
なんか作業持ち寄り集めるプロジェクト一個作ってそこに作業者独りずつコミットして下さい。
ただしテストコードはコミットしないでね
という話もされて
なに言われてるか分からんと混乱中。
詳しい人が上に居ない処だと、なんか変なローカルルールが流通中
早めに今のプロジェクト脱出しないと開発者的には腐りそうorz
— close_yutori (@kimukou2628) 2017年10月31日
パッケージ名とclass名の指摘だけでレビュー結構かかる感じ
大元のパッケージ名決めるのも、打ち合わせ含めひと月かかると言うのもWFらしすぎますですw
はい。まさにそんな感じです。build.gradle弄るにも環境変更申請書らしきものが必要みたいorz
— close_yutori (@kimukou2628) 2017年10月31日
お客さんの子会社の方はバンバン微修正でコミットしてるんだけど
コチラはレビュー単位でしかできず大量の修正をするとレビューできないと怒られるとか謎すぎ
そりゃ、テスト書くのに
— close_yutori (@kimukou2628) 2017年10月31日
build.gradle弄りますよね?
=>は?何で弄る必要あるの?
そもそも(政治的に)弄っちゃ駄目なんだけど
と話通じない訳だよな~。
これでカバレッジ取りたいって
ステップデバックでとるのかな?
うーん。想像できない、、
以前JUnitのJavaDocからテスト仕様書兼報告書のExcelシートにリバースしていました
— じゃあの (@jaano2001) 2017年10月31日
画面無かったので全部JUnitで書けたから出来たんですが、実際はそうもいきませんね
あ、いや。。。確か全部自分で書きました
— じゃあの (@jaano2001) 2017年10月31日
JavaDocの情報を取り出してpoiで指定のシートにセコセコと書き込みですね…
@kimukou2628 昔、吐き気がした某所から脱出するために、むしろそうした事があった気がします。なお、それ以来ずっと、収入が増えてない気がしますw
jenkinsとかで使う予定もあるみたいだけど、このプロジェクトビルドエラー検知以外しないつもりなのかな(汗
環境的な面で個人的に思うこと
仕事の能率が上がらないのを「会社のマシンがしょぼい」、「回線が細い」、「謎proxyがうざい」、「そもそも組織がおかしい」などのせいにしてないでしょうか。
— sat (@satoru_takeuchi) 2017年10月30日
だいたい合ってます
会社の業績が上がらない原因が「社員のスキルが足りない、社員が働かない」なことは経営層、マネジメント層が思っているほど多くはないんじゃないだろうか。そういう状態になっていることはあっても、それは結果であって原因ではないという仮説
— sat (@satoru_takeuchi) 2017年10月30日
仕事で携わってるアプリ、gradle pluginとminSDKのバージョンを持ち主の会社が上げたがらなくてAndroidStudio3.0が使えなくてしんどい。
— 夏菜@岩岳GJジェンツーペンギン (@o_kana614) 2017年10月30日
2.3までは無理くり使えるけど、InstantRunとか全く使えないし、悲しい
2.3に無理くり上げた方法で3.0に上げようとしたら、getなんとかIdなんとかに対応してないぞビルドは失敗ばーかばーかってエラーが出て無理だった。調べてもGradleのバージョンを上げようとしか出てこない。まぁ普通そうだよねぇ
— 夏菜@岩岳GJジェンツーペンギン (@o_kana614) 2017年10月30日
うん。正にこれ。今の案件はそのバージョンすらイジっちゃ駄目だよ*8
な感じかなーと。日本と海外の差が歴然としてるナウ・・
まあ日本って
超手が早くて出来のいいコードを書く人が
— 森木 一 (@morikihajime) 2017年10月30日
・電車遅延による遅刻が多い
・電車遅延による遅刻以外で残業をほとんどしない
という「ルールは守っているが心証が悪い」というクッソくだらない理由で文句言われて退職することになりました
大手さんだとスリーアウトチェンジとかいう所多いですね(汗。どのタイミングでリセットされるのかが不明だけど(年度? 契約単位?
— close_yutori (@kimukou2628) 2017年10月30日
「(開発とかインフラ保守とかの)いい人」の立ち位置だからだよなと。
これが遣り手?営業さんだと退職な話にはならんのですが、、
RT
今月の #俺俺改善活動
— えび🦐 (@ebc_2in2crc) 2017年10月30日
・開発環境が Mac になった
・使用可能ソフトウェアの制限が事実上なくなった
・はてなブログかなり書いた
・USB で充電できる🔋
・zlib コマンド作った💻
自分というより周りのおかげばっかりだけど😅👍
こういう環境を作れる人や会社に人材は集まるんだよねー
USB充電の件で言及されてたTw流れてたけど、お店の充電でもそうだけど、
バブル時期はそんなこと言われなかったそうなので、日本に精神的余裕が無いんでしょう
そこのプロパーただけ福利厚生?として
- 冷蔵庫の使用
- 文房具の使用
- 電源の使用(スマホ、携帯の充電等)
なんてのが現在ザラにあるからなー*9
そんなんでスキルフルな人材の転職は止められんし来ないだろうしね
それだけパートナーさんが殆どってこともあるんでしょうけどね(苦笑