真面目なブログはこっち 👉 blog.s64.jp

PIXELAスマートテレビ製品でリモコンが反応しづらいorペアリングできない時

PIXELAのスマートテレビ製品 ( PIX-SMB400, PIX-43VP100, PIX-55VP100 ) において、まれにリモコンが反応しづらかったり、何度試してもリモコンのペアリングができない場合がある。

具体的にどういった現象が起こるかというと、

  • 音声入力を認識しない(リモコンのランプが点灯しない)
  • 再ペアリングを試みるも、テレビ本体や他Bluetooth製品から見えない

などが発生する。この時のリモコンとは、製品付属の製品や別売りのPIX-RM047-BN1などを指す。

この記事執筆時点では、表示されるリモコンの電池残量は 30% 近く残っていた。

原因

まだかなり電池残量があるが、電池残量不足が原因の模様

対処

電池を交換した後に再度試みたところ、正常にリモコンを使用できた。
交換前はリモコンの再ペアリングを試みた際にすぐランプが消灯してしまっていたが、交換後は再ペアリングの際にはランプがちゃんと点灯してくれていた。

VSCodeの C# エクステンション (OmniSharp) が .NET Coreプロジェクトに対しInvalidProjectFileExceptionを吐いて上手くいかない時の対処

Visual Studio Code向けC#エクステンションには、OmniSharpが含まれる。
.NET Core SDKのプロジェクトを上記環境で利用しようとした際、以下のようなエラーが表示され上手く利用できない場合がある:

...
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
        Located 2 MSBuild instance(s)
            1: Visual Studio Build Tools 2017 15.9.28307.718 - "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin"
            2: StandAlone 15.0 - "C:\Users\shuma\.vscode\extensions\ms-vscode.csharp-1.20.0\.omnisharp\1.32.20\.msbuild\Current\Bin"
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
        Registered MSBuild instance: Visual Studio Build Tools 2017 15.9.28307.718 - "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin"
...
[warn]: OmniSharp.MSBuild.ProjectManager
        Failed to load project file 'c:\Users\shuma\Documents\my-dotnet-app\MyDotnetApp.csproj'.
c:\Users\shuma\Documents\my-dotnet-app\MyDotnetApp.csproj(1,1)
Microsoft.Build.Exceptions.InvalidProjectFileException: SDK 競合回避モジュールを読み込めませんでした。マニフェスト ファイルは存在しますが、SDK 競合回避モジュール DLL ファイルへのパスが見つかりませんでした。マニフェスト ファイル パス 'C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\SdkResolvers\Microsoft.Build.NuGetSdkResolver\Microsoft.Build.NuGetSdkResolver.xml'。SDK 競合回避モジュール パス: C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\CommonExtensions\Microsoft\NuGet\Microsoft.Build.NuGetSdkResolver.dll  c:\Users\shuma\Documents\my-dotnet-app\MyDotnetApp.csproj
   場所 Microsoft.Build.Shared.ProjectFileErrorUtilities.VerifyThrowInvalidProjectFile(Boolean condition, String errorSubCategoryResourceName, BuildEventFileInfo projectFile, Exception innerException, String resourceName, Object[] args)
   場所 Microsoft.Build.BackEnd.SdkResolution.SdkResolverLoader.TryAddAssemblyFromManifest(String pathToManifest, String manifestFolder, List`1 assembliesList, ElementLocation location)
   場所 Microsoft.Build.BackEnd.SdkResolution.SdkResolverLoader.FindPotentialSdkResolvers(String rootFolder, ElementLocation location)
   場所 Microsoft.Build.BackEnd.SdkResolution.SdkResolverLoader.LoadResolvers(LoggingContext loggingContext, ElementLocation location)
   場所 Microsoft.Build.BackEnd.SdkResolution.SdkResolverService.Initialize(LoggingContext loggingContext, ElementLocation location)
   場所 Microsoft.Build.BackEnd.SdkResolution.SdkResolverService.ResolveSdk(Int32 submissionId, SdkReference sdk, LoggingContext loggingContext, ElementLocation sdkReferenceLocation, String solutionPath, String projectPath, Boolean interactive)
   場所 Microsoft.Build.BackEnd.SdkResolution.CachingSdkResolverService.<>c__DisplayClass3_0.<ResolveSdk>b__0(String key)
   場所 System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   場所 Microsoft.Build.BackEnd.SdkResolution.CachingSdkResolverService.ResolveSdk(Int32 submissionId, SdkReference sdk, LoggingContext loggingContext, ElementLocation sdkReferenceLocation, String solutionPath, String projectPath, Boolean interactive)
   場所 Microsoft.Build.Evaluation.Evaluator`4.ExpandAndLoadImportsFromUnescapedImportExpressionConditioned(String directoryOfImportingFile, ProjectImportElement importElement, List`1& projects, SdkResult& sdkResult, Boolean throwOnFileNotExistsError)
   場所 Microsoft.Build.Evaluation.Evaluator`4.ExpandAndLoadImports(String directoryOfImportingFile, ProjectImportElement importElement, SdkResult& sdkResult)
   場所 Microsoft.Build.Evaluation.Evaluator`4.EvaluateImportElement(String directoryOfImportingFile, ProjectImportElement importElement)
   場所 Microsoft.Build.Evaluation.Evaluator`4.PerformDepthFirstPass(ProjectRootElement currentProjectOrImport)
   場所 Microsoft.Build.Evaluation.Evaluator`4.Evaluate(ILoggingService loggingService, BuildEventContext buildEventContext)
   場所 Microsoft.Build.Evaluation.Project.Reevaluate(ILoggingService loggingServiceForEvaluation, ProjectLoadSettings loadSettings, EvaluationContext evaluationContext)
   場所 Microsoft.Build.Evaluation.Project.ReevaluateIfNecessary(ILoggingService loggingServiceForEvaluation, ProjectLoadSettings loadSettings, EvaluationContext evaluationContext)
   場所 Microsoft.Build.Evaluation.Project.Initialize(IDictionary`2 globalProperties, String toolsVersion, String subToolsetVersion, ProjectLoadSettings loadSettings, EvaluationContext evaluationContext)
   場所 Microsoft.Build.Evaluation.Project..ctor(String projectFile, IDictionary`2 globalProperties, String toolsVersion, String subToolsetVersion, ProjectCollection projectCollection, ProjectLoadSettings loadSettings, EvaluationContext evaluationContext)
   場所 Microsoft.Build.Evaluation.ProjectCollection.LoadProject(String fileName, IDictionary`2 globalProperties, String toolsVersion)
   場所 OmniSharp.MSBuild.ProjectLoader.EvaluateProjectFileCore(String filePath) 場所 D:\a\1\s\src\OmniSharp.MSBuild\ProjectLoader.cs:行 129
   場所 OmniSharp.MSBuild.ProjectLoader.BuildProject(String filePath) 場所 D:\a\1\s\src\OmniSharp.MSBuild\ProjectLoader.cs:行 72
   場所 OmniSharp.MSBuild.ProjectFile.ProjectFileInfo.Load(String filePath, ProjectIdInfo projectIdInfo, ProjectLoader loader) 場所 D:\a\1\s\src\OmniSharp.MSBuild\ProjectFile\ProjectFileInfo.cs:行 94
   場所 OmniSharp.MSBuild.ProjectManager.LoadOrReloadProject(String projectFilePath, Func`1 loader) 場所 D:\a\1\s\src\OmniSharp.MSBuild\ProjectManager.cs:行 304

[fail]: OmniSharp.MSBuild.ProjectManager
        Attempted to update project that is not loaded: c:\Users\shuma\Documents\my-dotnet-app\MyDotnetApp.csproj

あるいは、以下のようなエラーである場合もある:

...
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
        Located 2 MSBuild instance(s)
            1: Visual Studio Community 2017 15.4.27004.2002 - "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin"
            2: StandAlone 15.0 - "C:\Users\shuma\.vscode\extensions\ms-vscode.csharp-1.20.0\.omnisharp\1.32.20\.msbuild\Current\Bin"
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
        Registered MSBuild instance: Visual Studio Community 2017 15.4.27004.2002 - "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin"
...
[warn]: OmniSharp.MSBuild.ProjectManager
        Failed to load project file 'c:\Users\shuma\Documents\my-dotnet-app\my-dotnet-app.csproj'.
c:\Users\shuma\Documents\my-dotnet-app\my-dotnet-app.csproj(1,1)
Microsoft.Build.Exceptions.InvalidProjectFileException: 指定された SDK 'Microsoft.NET.Sdk' は見つかりませんでした。  c:\Users\shuma\Documents\my-dotnet-app\my-dotnet-app.csproj
   場所 Microsoft.Build.Shared.ProjectErrorUtilities.ThrowInvalidProject(String errorSubCategoryResourceName, IElementLocation elementLocation, String resourceName, Object[] args)
   場所 Microsoft.Build.Evaluation.Evaluator`4.ExpandAndLoadImportsFromUnescapedImportExpressionConditioned(String directoryOfImportingFile, ProjectImportElement importElement, List`1& projects, Boolean throwOnFileNotExistsError)
   場所 Microsoft.Build.Evaluation.Evaluator`4.ExpandAndLoadImports(String directoryOfImportingFile, ProjectImportElement importElement)
   場所 Microsoft.Build.Evaluation.Evaluator`4.EvaluateImportElement(String directoryOfImportingFile, ProjectImportElement importElement)
   場所 Microsoft.Build.Evaluation.Evaluator`4.PerformDepthFirstPass(ProjectRootElement currentProjectOrImport)
   場所 Microsoft.Build.Evaluation.Evaluator`4.Evaluate(ILoggingService loggingService, BuildEventContext buildEventContext)
   場所 Microsoft.Build.Evaluation.Project.Reevaluate(ILoggingService loggingServiceForEvaluation, ProjectLoadSettings loadSettings)
   場所 Microsoft.Build.Evaluation.Project.ReevaluateIfNecessary(ILoggingService loggingServiceForEvaluation, ProjectLoadSettings loadSettings)
   場所 Microsoft.Build.Evaluation.Project.Initialize(IDictionary`2 globalProperties, String toolsVersion, String subToolsetVersion, ProjectLoadSettings loadSettings)
   場所 Microsoft.Build.Evaluation.Project..ctor(String projectFile, IDictionary`2 globalProperties, String toolsVersion, String subToolsetVersion, ProjectCollection projectCollection, ProjectLoadSettings loadSettings)
   場所 Microsoft.Build.Evaluation.ProjectCollection.LoadProject(String fileName, IDictionary`2 globalProperties, String toolsVersion)
   場所 OmniSharp.MSBuild.ProjectLoader.EvaluateProjectFileCore(String filePath) 場所 D:\a\1\s\src\OmniSharp.MSBuild\ProjectLoader.cs:行 129
   場所 OmniSharp.MSBuild.ProjectLoader.BuildProject(String filePath) 場所 D:\a\1\s\src\OmniSharp.MSBuild\ProjectLoader.cs:行 72
   場所 OmniSharp.MSBuild.ProjectFile.ProjectFileInfo.Load(String filePath, ProjectIdInfo projectIdInfo, ProjectLoader loader) 場所 D:\a\1\s\src\OmniSharp.MSBuild\ProjectFile\ProjectFileInfo.cs:行 94
   場所 OmniSharp.MSBuild.ProjectManager.<>c__DisplayClass30_0.<LoadProject>b__0() 場所 D:\a\1\s\src\OmniSharp.MSBuild\ProjectManager.cs:行 293
   場所 OmniSharp.MSBuild.ProjectManager.LoadOrReloadProject(String projectFilePath, Func`1 loader) 場所 D:\a\1\s\src\OmniSharp.MSBuild\ProjectManager.cs:行 304

[fail]: OmniSharp.MSBuild.ProjectManager
        Attempted to update project that is not loaded: c:\Users\shuma\Documents\my-dotnet-app\my-dotnet-app.csproj

対処

Visual Studio Build Tools 2017 (Build Tools for Visual Studio 2017) をアンインストールすれば上手く動くことを確認した。
具体的には、スタートメニュー内に Visual Studio Installer という名前のアプリケーションが存在するので、これを起動し Visual Studio Build Tools 2017 という項目の記載を探す。当該項目の 詳細▼ から アンインストール、OKと進めばよい。

アンインストールが完了したら、一旦VSCodeを開いていれば終了させてから再度プロジェクトを開き直すとよい。この状態で既に正常動作するようになっているはず。
もしBuildやRunが上手くいかないようなら、プロジェクト内の.vscodeディレクトリを削除して、再度プロジェクトを開き直してみる、というのを試してほしい。

広告まわりのドメイン知識メモ(1)

アドネットワーク

複数の媒体(の広告枠)につながっている広告事業者。
ここへ入稿すると、アドネットワークのロジックによりどこかのメディアへ掲載される。

最近はDSP経由で取ってきたものを表示したりもするらしい。

ADNW

アドネットワークの略称。

アドエクスチェンジ

複数のアドネットワークの広告枠へ出稿できる市場。必ず入札型のimp課金だけになるのが特徴。
セカンドプライスビッディングになる。

DoubleClick Ad Exchange

アドエクスチェンジ。Googleの認定パートナー企業が媒体ないしSSPとして枠を売れるようになる。
現在はGoogle Ad Managerに名称が変わっている。

AdX

DoubleClick Ad Exchange(ないし、現在のGoogle Ad Manager)の略称。

DSP

Demand Side Platform。複数のアドネットワークやSSPがつないでくる。まれに媒体(の広告枠)につながっている場合もある。

SSPからbidを受けると、入札額を返す。落札に成功した旨をSSPから受けると、広告を返す。
bid時にはユーザのターゲティング情報を貰えるので、それを元に入札額を考える。

アドジェネ / Adgene

Ad Geenrationの略称。

Ad Generation

DSP。Supershipが提供する。

SSP

Supply Side Platform。媒体(の広告枠)につながっている。複数のDSPへつなぎにいく。

媒体からimpが発生すると、DSPにユーザのターゲティング情報と一緒にbidを投げる。いちばん高い金額を提示してくれたDSPがいたら、落札する旨をDSPに投げて、広告を貰う。貰った広告は媒体で表示する。

fluct

SSP事業者。

Google AdSense

アドネットワーク。

YDN

Yahoo! ディスプレイアドネットワークのこと。

Yahoo! ディスプレイアドネットワーク

アドネットワーク。

i-mobile

アドネットワーク。

Googleディスプレイネットワーク

アドネットワーク。

アドサーバー

純広告, 自社広告, ADNW, SSP, アドエクスチェンジ とかを入稿しておいて、組んでおいた座組みに応じて表示できるツール。通常は媒体が自前で導入する。
たとえば「純広告 -> 自社広告 -> SSP 」のようにウォーターフォールを組んでおいて、かつ「フロアプライス○○円」とかしておくと、上からフロアプライスを満たすか順々にチェックして、当てはまったタイミングでそれを返す、みたいなことができる。

DFP

DoubleClick for Publisher の略称。現在はGoogle Ad Managerに名称が変わっている。

GAM

Google Ad Manager のこと。

Google Ad Manager

旧DoubleClick for Publishersと、DoubleClick Ad Exchangeの両者を吸収したブランド。
すなわち、アドサーバー および アドエクスチェンジ。

GMA

Google Mobile Ads のこと。

Header Bidding

Google Ad Manager のロジックより前に、他の各SSPへ平行でbidしておき より収益性の高い案件を出す手法。

GAMを用いたウォーターフォールの場合、上流でフロアプライスを満たせた時点でそれが配信されることに決定してしまう。結果、もしより後ろに配置してあったSSPのほうが収益性の高い案件を出せたとしても気付くことができなくなってしまう。

また、GAMのウォーターフォールはシリアルにチェックされるため、実際の広告表示まで遅延が発生する可能性がある。

そこで、GAMのロジックが走り出すよりも前に 各SSPへパラレルでbidし、最も高かったモノをGAMへ通知し表示させることにより、高い収益性と遅延の解消を実現するもの。

またAdXは動的にeCPMを決定する有利な仕組みにあるため、GAM内でAdXを利用している場合には、他SSPとAdXの競売をさせることができるようにもなる。AdXがフロアプライスを満たしウォーターフォール上流でせき止めてしまう状況が続いていた場合、より価格の適正化を図ることができる。

<head/>内で先にbidさせることから、header biddingと呼ばれている模様。

Header Biddingソリューション / Bidderソリューション / Header Bidding ライブラリ

Header Biddingを実現するためのツール(ないし、それを提供する事業者)。
事業者の場合、DSPにつながっている。

Prebid.js

Header Biddingライブラリ。JavaScriptを用い自前でADNWへbidできる。

APS

Amazon Publisher Services のこと。

Amazon Publisher Services

Amazonの提供する媒体向けサービス郡。AWSのようなもの。

TAM

Transparent Ad Marketplace の略称。

Transparent Ad Marketplace

Header Biddingソリューション。複数のDSPに接続されている。 Amazonが提供する Amazon Publisher Services のひとつ。

Client Header Bidding

<head/>内に<script/>を置いて、クライアントサイドで広告biddingから表示まで行う、Header Biddingの方式。

S2S

Server-to-Server。広告ドメインでは、Header Biddingの方式である Server-to-Server Header Bidding のことを指す。

Server-to-Server Header Bidding

バックエンド側でheader biddingを済ませてしまってからクライアントへレスポンスを返す、Header Biddingの方式。

PubMatic OpenWrap

Webサイト向けHeader Biddingソリューション。

PubMatic OpenBid

モバイルのネイティブアプリ向けHeader Biddingソリューション。

IAB

Interactive Advertising Bureauの略称。

Interactive Advertising Bureau

オンライン広告に関するAPIなどの標準化団体(業界団体)。

OpenRTB

IABの策定する、Real Time Biddingに関するAPI規格。ディスプレイ広告だけでなく、動画広告やHeader Biddingなどのリアルタイムbiddingを要するあらゆるAPI仕様も内包する。

MoPub

モバイル専業のアドエクスチェンジおよびSSP事業者。多くの場合はここが提供するSDKのことを指す。
MoPubに入稿されている在庫でRTBした後、広告SSP各社のSDKメディエーションを行う。
基本的に1st lookを取り、メディエートされる側には原則入らない方針の模様。

TAP

タッチスクリーンにおいて画面を軽く押すこと、言い換えればクリックのこと。
広告ドメインでは、Twitter Audience Networkのことを指す場合が多い。

Twitter Audience Network

アドネットワーク。MoPub買い付けも行う。

Androidで "cocos2d: warning: Uniform not found: depth" と出たら

以下のようなログが出力され続け、一向にアプリが立ち上がらない時がある:

2019-06-06 16:01:32.528 29778-29890/***.*****.******** D/cocos2d-x debug info: OpenGL error 0x0502 in /Users/***/***/cocos2d/cocos/./renderer/CCRenderer.cpp saveRenderState 158
2019-06-06 16:01:32.529 29778-29890/***.*****.******** D/cocos2d-x debug info: OpenGL error 0x0502 in /Users/***/***/cocos2d/cocos/./renderer/CCRenderer.cpp restoreRenderState 188
2019-06-06 16:01:32.542 29778-29890/***.*****.******** D/cocos2d-x debug info: cocos2d: warning: Uniform not found: depth

Androidエミュレータの右側 … と表示されたボタンを押して、Settings -> Advanced -> OpenGL ES renderer (requires restart) と書かれた項目を SwiftShader に変えた上、エミュレータを再起動してアプリを走らせ直せば、動く。

`NoClassDefFoundError: Failed resolution of: Landroid/arch/lifecycle/Observer`というエラーが出たら

Androidアプリ起動時に、以下のようなエラーが出てる場合がある:

I/***: Rejecting re-init on previously-failed class java.lang.Class<android.databinding.ViewDataBinding$LiveDataListener>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/arch/lifecycle/Observer;
        at void android.databinding.ViewDataBinding.<clinit>() (ViewDataBinding.java:120)
        at android.databinding.ViewDataBinding jp.voicy.app.player.DataBinderMapperImpl.getDataBinder(android.databinding.DataBindingComponent, android.view.View, int) (DataBinderMapperImpl.java:246)
        at android.databinding.ViewDataBinding android.databinding.MergedDataBinderMapper.getDataBinder(android.databinding.DataBindingComponent, android.view.View, int) (MergedDataBinderMapper.java:74)
        at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.bind(android.databinding.DataBindingComponent, android.view.View, int) (DataBindingUtil.java:199)
        at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.inflate(android.view.LayoutInflater, int, android.view.ViewGroup, boolean, android.databinding.DataBindingComponent) (DataBindingUtil.java:130)
        at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.inflate(android.view.LayoutInflater, int, android.view.ViewGroup, boolean) (DataBindingUtil.java:95)
        at android.view.View com.arrvis.library.app.BaseFragment.onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) (BaseFragment.kt:67)
        at android.view.View android.support.v4.app.Fragment.performCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) (Fragment.java:2261)
        at void android.support.v4.app.FragmentManagerImpl.moveToState(android.support.v4.app.Fragment, int, int, int, boolean) (FragmentManager.java:1419)
        at void android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(android.support.v4.app.Fragment) (FragmentManager.java:1750)
        at void android.support.v4.app.FragmentManagerImpl.moveToState(int, boolean) (FragmentManager.java:1819)
        at void android.support.v4.app.BackStackRecord.executeOps() (BackStackRecord.java:797)
        at void android.support.v4.app.FragmentManagerImpl.executeOps(java.util.ArrayList, java.util.ArrayList, int, int) (FragmentManager.java:2590)
        at void android.support.v4.app.FragmentManagerImpl.executeOpsTogether(java.util.ArrayList, java.util.ArrayList, int, int) (FragmentManager.java:2377)
        at void android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(java.util.ArrayList, java.util.ArrayList) (FragmentManager.java:2332)
        at boolean android.support.v4.app.FragmentManagerImpl.execPendingActions() (FragmentManager.java:2239)
        at void android.support.v4.app.FragmentManagerImpl.dispatchStateChange(int) (FragmentManager.java:3231)
        at void android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated() (FragmentManager.java:3181)
        at void android.support.v4.app.FragmentController.dispatchActivityCreated() (FragmentController.java:192)
        at void android.support.v4.app.FragmentActivity.onStart() (FragmentActivity.java:572)
        at void android.support.v7.app.AppCompatActivity.onStart() (AppCompatActivity.java:177)
        at void android.app.Instrumentation.callActivityOnStart(android.app.Activity) (Instrumentation.java:1391)
        at void android.app.Activity.performStart(java.lang.String) (Activity.java:7165)
        at void android.app.ActivityThread.handleStartActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions) (ActivityThread.java:2975)
        at void android.app.servertransaction.TransactionExecutor.performLifecycleSequence(android.app.ActivityThread$ActivityClientRecord, android.util.IntArray) (TransactionExecutor.java:180)
        at void android.app.servertransaction.TransactionExecutor.cycleToPath(android.app.ActivityThread$ActivityClientRecord, int, boolean) (TransactionExecutor.java:165)
        at void android.app.servertransaction.TransactionExecutor.executeLifecycleState(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:142)
        at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:70)
        at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1816)
        at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
        at void android.os.Looper.loop() (Looper.java:193)
        at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6718)
        at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
        at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
        at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
    Caused by: java.lang.ClassNotFoundException: Didn't find class "android.arch.lifecycle.Observer" on path: DexPathList[[zip file "/data/app/***/base.apk"],nativeLibraryDirectories=[/data/app/***/lib/arm64, /system/lib64]]
        at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:134)
        at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
        at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
        at void android.databinding.ViewDataBinding.<clinit>() (ViewDataBinding.java:120)
        at android.databinding.ViewDataBinding jp.voicy.app.player.DataBinderMapperImpl.getDataBinder(android.databinding.DataBindingComponent, android.view.View, int) (DataBinderMapperImpl.java:246)
        at android.databinding.ViewDataBinding android.databinding.MergedDataBinderMapper.getDataBinder(android.databinding.DataBindingComponent, android.view.View, int) (MergedDataBinderMapper.java:74)
        at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.bind(android.databinding.DataBindingComponent, android.view.View, int) (DataBindingUtil.java:199)
        at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.inflate(android.view.LayoutInflater, int, android.view.ViewGroup, boolean, android.databinding.DataBindingComponent) (DataBindingUtil.java:130)
        at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.inflate(android.view.LayoutInflater, int, android.view.ViewGroup, boolean) (DataBindingUtil.java:95)
        at android.view.View com.arrvis.library.app.BaseFragment.onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) (BaseFragment.kt:67)
        at android.view.View android.support.v4.app.Fragment.performCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) (Fragment.java:2261)
        at void android.support.v4.app.FragmentManagerImpl.moveToState(android.support.v4.app.Fragment, int, int, int, boolean) (FragmentManager.java:1419)
        at void android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(android.support.v4.app.Fragment) (FragmentManager.java:1750)
        at void android.support.v4.app.FragmentManagerImpl.moveToState(int, boolean) (FragmentManager.java:1819)
        at void android.support.v4.app.BackStackRecord.executeOps() (BackStackRecord.java:797)
        at void android.support.v4.app.FragmentManagerImpl.executeOps(java.util.ArrayList, java.util.ArrayList, int, int) (FragmentManager.java:2590)
        at void android.support.v4.app.FragmentManagerImpl.executeOpsTogether(java.util.ArrayList, java.util.ArrayList, int, int) (FragmentManager.java:2377)
        at void android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(java.util.ArrayList, java.util.ArrayList) (FragmentManager.java:2332)
        at boolean android.support.v4.app.FragmentManagerImpl.execPendingActions() (FragmentManager.java:2239)
        at void android.support.v4.app.FragmentManagerImpl.dispatchStateChange(int) (FragmentManager.java:3231)
        at void android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated() (FragmentManager.java:3181)
        at void android.support.v4.app.FragmentController.dispatchActivityCreated() (FragmentController.java:192)
        at void android.support.v4.app.FragmentActivity.onStart() (FragmentActivity.java:572)
        at void android.support.v7.app.AppCompatActivity.onStart() (AppCompatActivity.java:177)
        at void android.app.Instrumentation.callActivityOnStart(android.app.Activity) (Instrumentation.java:1391)
        at void android.app.Activity.performStart(java.lang.String) (Activity.java:7165)
        at void android.app.ActivityThread.handleStartActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions) (ActivityThread.java:2975)
        at void android.app.servertransaction.TransactionExecutor.performLifecycleSequence(android.app.ActivityThread$ActivityClientRecord, android.util.IntArray) (TransactionExecutor.java:180)
        at void android.app.servertransaction.TransactionExecutor.cycleToPath(android.app.ActivityThread$ActivityClientRecord, int, boolean) (TransactionExecutor.java:165)
        at void android.app.servertransaction.TransactionExecutor.executeLifecycleState(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:142)
        at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:70)
        at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1816)
        at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
        at void android.os.Looper.loop() (Looper.java:193)
        at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6718)
        at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
        at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
        at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
I/***: Rejecting re-init on previously-failed class java.lang.Class<android.databinding.ViewDataBinding$LiveDataListener>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/arch/lifecycle/Observer;
        at void android.databinding.ViewDataBinding.<clinit>() (ViewDataBinding.java:120)
        at android.databinding.ViewDataBinding jp.voicy.app.player.DataBinderMapperImpl.getDataBinder(android.databinding.DataBindingComponent, android.view.View, int) (DataBinderMapperImpl.java:246)
        at android.databinding.ViewDataBinding android.databinding.MergedDataBinderMapper.getDataBinder(android.databinding.DataBindingComponent, android.view.View, int) (MergedDataBinderMapper.java:74)
        at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.bind(android.databinding.DataBindingComponent, android.view.View, int) (DataBindingUtil.java:199)
        at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.inflate(android.view.LayoutInflater, int, android.view.ViewGroup, boolean, android.databinding.DataBindingComponent) (DataBindingUtil.java:130)
        at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.inflate(android.view.LayoutInflater, int, android.view.ViewGroup, boolean) (DataBindingUtil.java:95)
        at android.view.View com.arrvis.library.app.BaseFragment.onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) (BaseFragment.kt:67)
        at android.view.View android.support.v4.app.Fragment.performCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) (Fragment.java:2261)
        at void android.support.v4.app.FragmentManagerImpl.moveToState(android.support.v4.app.Fragment, int, int, int, boolean) (FragmentManager.java:1419)
        at void android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(android.support.v4.app.Fragment) (FragmentManager.java:1750)
        at void android.support.v4.app.FragmentManagerImpl.moveToState(int, boolean) (FragmentManager.java:1819)
        at void android.support.v4.app.BackStackRecord.executeOps() (BackStackRecord.java:797)
        at void android.support.v4.app.FragmentManagerImpl.executeOps(java.util.ArrayList, java.util.ArrayList, int, int) (FragmentManager.java:2590)
        at void android.support.v4.app.FragmentManagerImpl.executeOpsTogether(java.util.ArrayList, java.util.ArrayList, int, int) (FragmentManager.java:2377)
        at void android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(java.util.ArrayList, java.util.ArrayList) (FragmentManager.java:2332)
        at boolean android.support.v4.app.FragmentManagerImpl.execPendingActions() (FragmentManager.java:2239)
        at void android.support.v4.app.FragmentManagerImpl.dispatchStateChange(int) (FragmentManager.java:3231)
        at void android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated() (FragmentManager.java:3181)
        at void android.support.v4.app.FragmentController.dispatchActivityCreated() (FragmentController.java:192)
        at void android.support.v4.app.FragmentActivity.onStart() (FragmentActivity.java:572)
        at void android.support.v7.app.AppCompatActivity.onStart() (AppCompatActivity.java:177)
        at void android.app.Instrumentation.callActivityOnStart(android.app.Activity) (Instrumentation.java:1391)
        at void android.app.Activity.performStart(java.lang.String) (Activity.java:7165)
        at void android.app.ActivityThread.handleStartActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions) (ActivityThread.java:2975)
        at void android.app.servertransaction.TransactionExecutor.performLifecycleSequence(android.app.ActivityThread$ActivityClientRecord, android.util.IntArray) (TransactionExecutor.java:180)
        at void android.app.servertransaction.TransactionExecutor.cycleToPath(android.app.ActivityThread$ActivityClientRecord, int, boolean) (TransactionExecutor.java:165)
        at void android.app.servertransaction.TransactionExecutor.executeLifecycleState(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:142)
        at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:70)
        at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1816)
        at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
        at void android.os.Looper.loop() (Looper.java:193)
        at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6718)
        at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
        at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
        at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
    Caused by: java.lang.ClassNotFoundException: Didn't find class "android.arch.lifecycle.Observer" on path: DexPathList[[zip file "/data/app/***/base.apk"],nativeLibraryDirectories=[/data/app/***/lib/arm64, /system/lib64]]
        at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:134)
        at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
        at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
        at void android.databinding.ViewDataBinding.<clinit>() (ViewDataBinding.java:120)
        at android.databinding.ViewDataBinding jp.voicy.app.player.DataBinderMapperImpl.getDataBinder(android.databinding.DataBindingComponent, android.view.View, int) (DataBinderMapperImpl.java:246)
        at android.databinding.ViewDataBinding android.databinding.MergedDataBinderMapper.getDataBinder(android.databinding.DataBindingComponent, android.view.View, int) (MergedDataBinderMapper.java:74)
        at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.bind(android.databinding.DataBindingComponent, android.view.View, int) (DataBindingUtil.java:199)
        at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.inflate(android.view.LayoutInflater, int, android.view.ViewGroup, boolean, android.databinding.DataBindingComponent) (DataBindingUtil.java:130)
        at android.databinding.ViewDataBinding android.databinding.DataBindingUtil.inflate(android.view.LayoutInflater, int, android.view.ViewGroup, boolean) (DataBindingUtil.java:95)
        at android.view.View com.arrvis.library.app.BaseFragment.onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) (BaseFragment.kt:67)
        at android.view.View android.support.v4.app.Fragment.performCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) (Fragment.java:2261)
        at void android.support.v4.app.FragmentManagerImpl.moveToState(android.support.v4.app.Fragment, int, int, int, boolean) (FragmentManager.java:1419)
        at void android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(android.support.v4.app.Fragment) (FragmentManager.java:1750)
        at void android.support.v4.app.FragmentManagerImpl.moveToState(int, boolean) (FragmentManager.java:1819)
        at void android.support.v4.app.BackStackRecord.executeOps() (BackStackRecord.java:797)
        at void android.support.v4.app.FragmentManagerImpl.executeOps(java.util.ArrayList, java.util.ArrayList, int, int) (FragmentManager.java:2590)
        at void android.support.v4.app.FragmentManagerImpl.executeOpsTogether(java.util.ArrayList, java.util.ArrayList, int, int) (FragmentManager.java:2377)
        at void android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(java.util.ArrayList, java.util.ArrayList) (FragmentManager.java:2332)
        at boolean android.support.v4.app.FragmentManagerImpl.execPendingActions() (FragmentManager.java:2239)
        at void android.support.v4.app.FragmentManagerImpl.dispatchStateChange(int) (FragmentManager.java:3231)
        at void android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated() (FragmentManager.java:3181)
        at void android.support.v4.app.FragmentController.dispatchActivityCreated() (FragmentController.java:192)
        at void android.support.v4.app.FragmentActivity.onStart() (FragmentActivity.java:572)
        at void android.support.v7.app.AppCompatActivity.onStart() (AppCompatActivity.java:177)
        at void android.app.Instrumentation.callActivityOnStart(android.app.Activity) (Instrumentation.java:1391)
        at void android.app.Activity.performStart(java.lang.String) (Activity.java:7165)
        at void android.app.ActivityThread.handleStartActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions) (ActivityThread.java:2975)
        at void android.app.servertransaction.TransactionExecutor.performLifecycleSequence(android.app.ActivityThread$ActivityClientRecord, android.util.IntArray) (TransactionExecutor.java:180)
        at void android.app.servertransaction.TransactionExecutor.cycleToPath(android.app.ActivityThread$ActivityClientRecord, int, boolean) (TransactionExecutor.java:165)
        at void android.app.servertransaction.TransactionExecutor.executeLifecycleState(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:142)
        at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:70)
        at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1816)
        at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
        at void android.os.Looper.loop() (Looper.java:193)
        at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6718)
        at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
        at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
        at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)

なぜ起きるのか

これは単にLiveDataの関連クラスが含まれていないということ。つまり、当該のクラスを追加すればよい:

dependenceis {
    ...
    implementation "android.arch.lifecycle:livedata:1.1.1"
    ...
}

adbにPATHを通す on Mac

Android Studioをインストールすれば、標準でAndroid SDKやadb (Android Debug Bridge) などのツールが付属する。
が、これらはPATHが通っていないため、ターミナルから利用することができない。

検証環境

  • macOS High Sierra 10.13.6 (on Parallels)
    • HAXMのインストールはSkip
  • Android Studio 3.4
    • android-studio-ide-183.5452501-mac.dmg

前提: Android Studioを推奨設定でインストールしておく

一度Android Studioを起動し、初回ウィザード内のInstall TypeでStandardを選択しておく。

このとき、標準で /Users/$USER/Library/Android/sdk にAndroid SDKがダウンロード・インストールされる。

$ANDROID_HOME を設定する

これはマストではないが、一般的に設定されているためやってしまう。
$ANDROID_HOME は上記のAndroid SDKがインストールされたルートを指す。

echo 'export ANDROID_HOME=$HOME/Library/Android/sdk' >> ~/.bash_profile

PATHを通す

adbは $ANDROID_HOME/platform-tools/adb にある。fastbootコマンドもここにある。

echo 'export PATH=$ANDROID_HOME/platform-tools:$PATH' >> ~/.bash_profile

新しいシェルを起動するなりして再読込し、adbが見えるようになったら完了。

which adb
# /Users/username/Library/Android/sdk/platform-tools/adb

androiddebugkey (debug.keystore) がない場合の対処

前提として、Android実機 / エミュレータ上で動作するアプリ(APKファイル)は署名済みである必要がある。
デバッグ用keystoreは通常、Android Studioを用いてAndroidアプリ開発をしていれば自動生成されている。

が、Android Studioをインストールしていないなどの理由でdebug用keystoreがない場合、以下のコマンドで生成することができる:

keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname 'C=US, O=Android, CN=Android Debug'
# 10,000日間有効な2,048ビットのRSAの鍵ペアと自己署名型証明書(SHA256withRSA)を生成しています
#  ディレクトリ名: C=US, O=Android, CN=Android Debug
# [debug.keystoreを格納中]
# 
# Warning:
# JKSキーストアは独自の形式を使用しています。"keytool -importkeystore -srckeystore debug.keystore -destkeystore debug.keystore -deststoretype pkcs12"を使用する業界標準の形式であるPKCS12に移行することをお薦めします。
ls
# debug.keystore