build不具合対処ネタ(WearApp Project編)

はじめに

すごくくだらない暗黙仕様?な話で 一日ビルド出来なかったので備忘録としてメモ

今回もLibraryProject周りの不具合

動作環境

備忘的なメモ

support v4 library の minsdk14化の境目

  • 24.1.X ・・minsdk4
  • 24.2.X ・・minsdk9
  • 26.0.X ・・minsdk14

因みに support-library-24.2.X になるまで、

Android 5.0以上で MenuItemCompat.getActionView でnullを返すというバグが有り

google play services の minsdk14化の境目

  • 10.0.X ・・minsdk9
  • 10.2.X ・・minsdk14

ndk バージョンによる minsdk14化の境目

  • r14 ・・minsdk9
  • r15 ・・minsdk14

tools:overrideLibrary

  • 指定が255文字制限有り*1
  • 今回のプロジェクト形式で使うとエラーになる*2

local.aar/jarの差し替え時

ココらへんベテランの方の呟きとかでは見たこと無いんだけど、暗黙知

gradle最近はじめました系 の呟きでは何度か見たこと有るんですけどね・・(汗

サードパーティライブラリの境目

license_dialog

  • DialogFragment使うよりベタな方が使いやすい場合が多い。
  • 1.8.1 まで minsdk 8
  • 1.8.2 から minsdk14 になる *3
compile 'de.psdev.licensesdialog:licensesdialog:1.8.1'

leakcanary

  • 1.5 まで minsdk 8
  • 1.5.1から minsdk14 *4
 debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
 releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'

PermissionDispacher

  • 2.3.2 までは minsdk 9
  • 2.4.0から minsdk14
  compile("com.github.hotchemi:permissionsdispatcher:2.3.2") {
      // if you don't use android.app.Fragment you can exclude support for them
      exclude module: "support-v13"
  }
  annotationProcessor "com.github.hotchemi:permissionsdispatcher-processor:2.3.2"

状況的な話

  • BlankActivity
  • wearApp

のProjectをウイザード経由で作成して、共通ライブラリ(aar)を追加して

下記の構成を作った時、ビルドできなかったという話

  • MainP
    • apply plugin: ‘com.android.application’
  • WearP
    • apply plugin: ‘com.android.application’
  • LibP

    • G様推奨形式 (import local.aar)
  • LibP/build.gradle

configurations.maybeCreate("default")
artifacts.add("default", file('nend-sdk-3.2.2.aar'))

G様推奨方法でlibraryProjectをimportしている状態

この状態で

build/intermediates/exploded-aar/LibP.aar not found

とエラーが出てビルドができない状態。StackOverFlowでも回答がついていない状態。

でも gradle plugin 2.2 だとビルドが出来るような状況

  • rebuild
    • => OK
  • run するときのbuild
    • => NG

という状況ですごく混乱した><

Wiz経由で作成時に直した所

  • MainP

  • AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.nihon_tc.fittest">

   <uses-feature
        android:name="android.hardware.type.watch"
        android:required="false"
        tools:ignore="InvalidWearFeatureAttribute"/>
  • ビルド時に、
    • android.hardware.type.watch が必須
    • ManifestMargerにより minsdk22だよ(WearApp側がminsdk22)

とか言われて target-19の端末にインストールできず。記述したら可能になった。

これ初心者に作らせると、いきなりminsdk22のアプリを作らせることになるわけで敷居高くないか?

  • LibP

  • MapsActivity

@TargetApi(22)
public class MainActivity

エラー赤字になっていたので

ココらへんってテンプレート不正なのかな?


で何が悪かったのか?

LibPを通常のmaven形式のように展開しようとしてエラーになる

AS 2.3からは Library Project は展開場所が違うようなんですが、この場合の考慮漏れっぽい*5

  • MultiProjectで
  • 複数のapplicationが有るプロジェクト

では駄目みたい。

で紹介されていた

でもNG。

どちらかというと対応漏れ?に近い感じなんだろうか?

通る形式★

  • MainP
    • apply plugin: ‘com.android.application’
  • LibP
    • G様推奨形式

Android-Studio-Sample-Projects 等のgithubプロジェクトを簡単に開く方法

現在 dryrunが動かなくなっているので、studioコマンドで対応するのが良いらしいです

studioコマンドに関する追記(2017/04/26)

  • これpythonスクリプト(実行権限付き)
    • winだとこれどう生成するんだろう?
  • Welcome画面 や 既にASが立ち上がっている状態じゃないと起動に失敗する
    • port接続するような動き * local.propeties 等を作成しないので、他のプロジェクトから要コピー
  • ないsdkを自動DLしてくる機能は動かないので *6
    • targetsdk 等は、既にあるものを指定

でどう解決するのか?

  • MainP/build.gradle
apply plugin: 'com.android.application'

repositories{
     flatDir{
          dirs 'libs_aar'
     }
}

dependencies {
   compile(name:'nend-sdk-3.2.2', ext:'aar')
}

としてLibPを使わない。全部maven形式っぽい記述に合わせる*7

結論として

apply plugin: ‘com.android.application’ が複数あるプロジェクトは

  • library Projectの扱いが旧版のまま
  • Android-Studio-Sample-Projects もmultiDexError がでてビルドできない状況
    • Wiz経由の1プロジェクトではビルド可能なので、全プロジェクトの関数参照がくっついてしまっている挙動

これみてると、あいかわらず雑い対応で、これを正式版としてだされてもな〜(汗 とは思う

  • wear Project って流行らせる気が有るんだろうか??

とか正直思ってしまうのは気のせい?

InstantApp対応とかが、wear形式で出てきた場合は注意が必要かもしれない*8


TLメモ

最近は予定が立たなくて平日勉強会は基本的に行けてないなーとかいう感じ(汗

休日も寝落ちしていることも多々ありますし・・・

Databinding

WebP

onSaveInstanceState

*1:従ってsupport-v4は実体側Prjを指定しなければいけないので実質overrideは無理?

*2:通る形式★では問題なく使えるが・・・

*3:support library依存による

*4:これもsupport library依存による

*5:これもAS2.3からのInstantRun対応のためのbuildフォルダ構成の作り直しの影響?

*6:この機能AS 2.3.3 以降になったらどうも動かなくなってるみたいですね・・。うーん。2.3.2までは動いていたのに・・・

*7:G様社内だと、全部社内maven使っていて、G様推奨対応も特別対応に近い形式なのでテストしていないっぽい

*8:まあ個人開発者向けに公開されるかわからないので老婆心かもしれないけど<汗