2018年秋以降 Androidアプリ新規公開、旧アプリアップデート用メモ

meisiyou
Androidアプリを久々に手入れしようと思ったら酷い目に遭ったらしいにゃ!

ターゲットAPIレベルは26以上にする必要

https://developers-jp.googleblog.com/

2018 年 8 月より、Google Play のすべての新しいアプリとゲームで、ターゲットを API レベル 26(Android 8.0 Oreo)以降に設定することが求められるようになりました。さらに、2018 年 11 月以降は、この要件が既存のアプリとゲームのアップデートにも拡大されます。

とあるように、今年8月からGoogle Playに公開する、あるいはアップデートするアプリはターゲットAPIレベルを26(Android8.0)以上に設定しなければなりません。
まずSDK Manager[File] > [Settings] > [Appearance & Behavior] > [System Settings] > [Android SDK]
でSDK Platformsタブからそれ以降のAPIレベルのSDKをダウンロードします。
その後、File>Project StructureからappのPropertiesタブを開き、Compile Sdk Versionを[API 26: Android 8.0]以上に上げましょう。Flavorsタブの同様項目もチェックしてください。
minSDKのバージョンは低いままで大丈夫です!これを上げるとインストール可能端末が減ってしまいます!

古いプロジェクトの場合、設定を変更するとそれに応じてbuild.gradleの設定変更が必要になると思います。
AndroidビューでGrandle Scripts > build.gradle(Module: app)を開いて警告が出ている行のバージョンを変更しましょう。

2018年11月以降は既存アプリアップデート全てに適用されるという事で、中々キツいものがあります。

Android9.0以降では

HTTPS のデフォルト化
すべてのネットワーク トラフィックをクリアテキスト(暗号化されていない HTTP)から TLS で保護されたウェブサイト(HTTPS)に移行するという大きな取り組みの一環として、ネットワーク セキュリティ構成のデフォルトがすべてのクリアテキスト トラフィックをブロックするように変更されます。特定のドメインで明示的にクリアテキストをオプトインしない限り、TLS で接続する必要があります。詳細については、こちらをご覧ください。

という事らしいですので、Webサーバを立ててアプリと通信している人にとっては更に大変な事になりそうですね…

Configuration ‘compile’ is obsolete and has been replaced with ‘implementation’. It will be removed at the end of 2018というエラーが出る

build.gradle(Module: app)の「compile ‘***’」という記述を「implementation ‘***’」に、「testcompile ‘***’」という記述を「testimplementation ‘***’」と新しい記述にすべて直すと解決しました。

ERROR: resizing partition e2fsck failed with exit code 8というエラー

https://woshidan.hatenablog.com/entry/2017/03/25/041427
というサイトにはエミュレータの設定をいじって再起動するとありますが、私の場合はAndroid Studioを1.5から3.2にバージョンアップすると治りました。

エミュレータの新イメージが追加出来ない

久々にAndroid Studioを触ったのですが、最初に述べたターゲットAPIの関連で手持ちのAndroidデバイスでは実機デバイス出来なくなってしまい、新しくエミュレータを設定する事にしました。しかし最新イメージをインストールしたのですが、エミュレータを作成時にOSを選択しようとしても何故かnullという表示になってしまいます。
Android Studioのバージョンが古い事が原因なので、Android Studioの新しいバージョンをインストールしましょう。

Gradleの同期(sync)に失敗する

非常に色々な原因が関係する事が多いのですが、build.gradleにモジュールを設定し間違えていた、または設定を変えてゴミが残っているという事が多いです。
Clean ProjectからRebuild Projectをするか、[File] > [Invalidate caches/Restart] を行うと良くなる事が多いです。

No toolchains found in the NDK toolchains folder for ABI with prefix: llvm というエラーが出る

NDKに関するバグのようですが、NDKに関するSDK-Toolsをインストールした所発生しました。NDKを使う事がないので削除した所、このエラーは発生しなくなりました。

Gradle sync failed: failed to find Build Tools~というエラーが出る

古いプロジェクトの依存モジュールを色々と変えていたのですが、このエラーが消えませんでした。
原因はbuild.gradleのバージョンにあるようですので、SDK Manager [File] > [Settings] > [Appearance & Behavior] > [System Settings] > [Android SDK]からSDK Toolsタブを選び右下のShow Package Detailsをチェックします。すると各パッケージの詳細が表示されますので、Android SDK Build Toolsの一覧から高いバージョンをチェックしインストールします。

Error:Gradle DSL method not found: ‘has()’というエラーが出る

通信用ライブラリvolleyがエラーを吐くのですが、has()メソッドがGradle3.0で廃止されたのが原因のようです。
has()が使われている箇所をhasProperty()に変えると治ります。

Resource Entry already definedというエラーが出る

Clean Project から Rebuild Projectをしたり、[File] > [Invalidate caches/Restart] を行うと治りました。

duplicate value for resource ‘***’ with config'” “やCould not find method google() for arguments [] on repository containerというエラーが出る

implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:design:27.1.0'
implementation 'com.android.support:animated-vector-drawable:27.1.1'

com.android.support関連のこの辺りのバージョンを近い数字に変えたり、いじっていたら治った気がします。

Error : Program type already present: android.support.design.widget.CoordinatorLayout$Behaviorというエラーが出る

implementation 'com.android.support:design:27.1.0'

など、com.android.support関連のバージョンを上げる&近いものに揃えた所治った気がします。

java.lang.ClassCastException: android.support.v7.widget.ActivityChooserView$InnerLayout cannot be cast to android.support.v7.widget.LinearLayoutCompat
というエラーが出る

com.android.supportライブラリの特定バージョンで問題が起きるらしく、

implementation 'com.android.support:design:27.1.0'
↓
implementation 'com.android.support:design:27.1.1'

に修正した所治りました。

NendSDK3.1.1から5.0.2への移行の注意点

  • RecyclerViewにデフォルトで対応しなくなりました。なのでRecyclerViewを使っていた人はここを参考にNend用のViewHolderを自前で用意する必要があります。
  • Nend専用のViewが無くなりました。レイアウトで使うのはTextView,ImageViewだけです。過去のnet.nend.android.NendAdNativeTextViewやnet.nend.android.NendAdNativeImageViewは使えません。
  • NendAdNativeClientクラスからsetListener()メソッドが無くなっており、またNendAdNativeViewBinderクラスからcreateRecyclerViewHolder()メソッドが無くなっていますので、実装の仕方がかなり異なります。

Variable ’viewHolder’ is accessed from within inner class, needs to be declar finalというエラーが出る

上記新しい実装に従うとonBindViewHolder()メソッドでこういうエラー出るようになったので、

public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
->
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, int i) {

に変更しました。

Unable to merge dexというビルドエラーが出る

Nend SDKが原因だったのだと思いますが、旧バージョンのNend SDKもきちんと全てアンロードして、implementationの記述も最新の物のみを確認した所治りました。

android.view.View android.support.v7.widget.RecyclerView$ViewHolder.itemViewというエラーが出る

色々な原因があると思いますが、私の場合はNend SDKのViewが廃止になったのを知らずにそのまま使っていた所、上手く参照が取れなかったのが原因で発生したようです。

meisiyou
アプリ保守も大変だにゃ!
この記事が役に立ったら★付けて欲しいにゃ。
1 Star2 Stars3 Stars4 Stars5 Stars (1票 平均: 5.00)
Loading...

    コメント