ラベル Android の投稿を表示しています。 すべての投稿を表示
ラベル Android の投稿を表示しています。 すべての投稿を表示

2024年3月23日土曜日

Android アプリを久しぶりにビルドしたときのメモ

Android アプリを久しぶりにビルドしたときのメモ

概要

シミュレーターで動作するまでにいろいろとエラーを解消する必要があったのでメモしておきます
正直出過ぎるので都度対応するのが面倒な場合は一から書き直したほうが最新のプロジェクト構成にもなるので良いかなと思います

環境

  • macOS 14.4
  • Android Studio Iguana
  • コード最終コミット 2018/10/2

gradle plugin のバージョンの指定

エラー

A problem occurred evaluating project ':app'.

解決方法

build.gradle で gradle のバージョン部分を修正する
File -> Project Structure -> Project からでも OK

agp_version = '8.3.1'

distributionUrlの設定

エラー

Minimum supported Gradle version is 8.4. Current version is 8.2.

解決方法

./gradle/wrapper/gradle-wrapper.properties を作成し以下を記載する

distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip

namespace の指定がない

エラー

Namespace not specified. Specify a namespace in the module's build file.

解決方法

app/build.gradle への namespace ディレクティブの追加

android {
    namespace "com.example.myapp"

Suggestions のアップデート

エラー

  • 不明

解決方法

File -> Project Structure -> Suggestions から表示されている Update を適用すれば OK

この段階で gradle ビルドは成功した
以下は実行時に発生したエラーへの対処方法

AndroidX へのマイグレーション

エラー

Caused by: com.android.builder.errors.EvalIssueException: Configuration `:app:debugRuntimeClasspath` contains AndroidX dependencies, but the `android.useAndroidX` property is not enabled, which may cause runtime issues.

解決方法

./gradle.properties の作成と以下の追記

android.useAndroidX=true
android.enableJetifier=true

コードの AnroidX へのマイグレーション

エラー

import android.support.v7.app.AppCompatActivity がないなどのエラー多数

解決方法

なぜか Iguana には Migrate to AndroidX の機能がないので shell スクリプトを使う

#!/usr/bin/env bash

# I've found that the "Migrate to AndroidX" converter in Android Studio doesn't work very
# well, so I wrote my own script to do the simple job of converting package names.
#
# You can download a CSV of package names here: https://developer.android.com/topic/libraries/support-library/downloads/androidx-class-mapping.csv
#
# It'll run faster on a clean build because then there are fewer files to scan over.
#
# Uses `gsed` because I'm on a Mac. Can easily replace with `sed` if you don't have `gsed`.
# 
# This isn't perfect; it won't find every conversion issue. You break it you buy it. Viewer discretion is advised.

MAPPING_FILE=~/Downloads/androidx-class-mapping.csv
PROJECT_DIR=~/data/repo/android-fndic

replace=""
while IFS=, read -r from to
do
        replace+="; s/$from/$to/g"
done <<< "$(cat $MAPPING_FILE)"

find $PROJECT_DIR \( -name "*.kt" -o -name "*.java" -o -name "*.xml" \) -type f -not -path '*/\.git*' -print0 | xargs -0 gsed -i "$replace"

package 定義の削除

エラー

Setting the namespace via the package attribute in the source AndroidManifest.xml is no longer supported.

解決策

AndroidManifest.xml から package を削除

SDK バージョン修正

エラー

A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction

上記プラス指定のバージョンが小さすぎるという旨の英語のエラーが出たはず

解決策

app/build.gradle への minSdkVersion と targetSdkVersion の修正

minSdkVersion 21
targetSdkVersion 34

AndroidManifest.xml の activity に android:exported の追加

エラー

android:exported needs to be explicitly specified for element

解決策

android:exported="true"

google-services のアップデート

エラー

Type 'com.google.gms.googleservices.GoogleServicesTask' field 'quickstartFile'

解決策

build.gradle 修正

classpath 'com.google.gms:google-services:4.4.1'
mavenCentral()

コードリファクタ

エラー

error: package R does not exist
error: cannot find symbol addTestDevice

など

解決方法

基本はリファクタ機能を使えば OK
Admob に関しては参考サイトの URL の通りにバナー広告などを設置する

Admob 修正

エラー

Missing application ID. AdMob publishers should follow the instructions

解決方法

https://developers.google.com/admob/android/quick-start?hl=ja#import_the_mobile_ads_sdk

AndroidManifest.xml に APPLICATION_ID を追記する

Admonb 修正2

エラー

The ad unit ID can only be set once on AdView.

解決策

xml 側とコード側で2回広告IDをセットしている場合はどちらかを削除する

adView.setAdUnitId("ca-pub-xxx")

アプリビルド時の Signing の修正

エラー

Android App Bundle をアップロードするには、Play App Signing に登録している必要があります。

解決策

公開鍵と pepk.jar をダウンロードし秘密鍵を生成
秘密鍵は Google Play にアップロード
公開鍵 (encryption_public_key.pem) は Google Play からダウンロード可能
これを使ってアプリに Signing する
keystore がない場合は Android Studio で作成する

  • java -jar pepk.jar --keystore=app.crt --alias=foo --output=app.key --rsa-aes-encryption --encryption-key-path=encryption_public_key.pem

最後に

アプリのプロジェクトは常に最新バージョンに対応しておかないと大変なことになります

参考サイト

2022年8月18日木曜日

Google Play Console からアプリを削除する方法

Google Play Console からアプリを削除する方法

概要

申請するしかないので申請します

環境

  • Google Play Console 2022/08/24 時点

申請する

https://support.google.com/googleplay/android-developer/contact/publishing

ここにアプリの情報を記載して申請するだけです

「デベロッパー アカウント ID *」は Google Play Console にログインして確認します

「以下の一般的な問題やリクエストから選択してください。」は「アプリの削除をリクエストしたい」にします

「どのようなことでお困りですか? *」には「別アプリとして公開したのでこのアプリの削除をお願いします。」としました

なぜかスクリーンショットも必須なのでスクリーンショットを添付しましょう
アプリの一覧画面でも添付しておけば大丈夫です

削除できる条件

  • アプリが良好な状態である(Google によって削除、停止されていない)
  • アプリのインストール数が全期間を通じて 0 である
  • アプリが 24 時間公開停止状態である(インストール数が 0 になるようにしてください)

たぶんこれをクリアするのが指南の技です

2018年9月16日日曜日

macOS High Sierra + Android のエミュレータでインターネットにアクセスできない

概要

原因はホスト名が解決できないためです
エミュレータ起動時に DNS を指定してあげます

環境

  • macOS 10.13.6
  • Android Studio 3.1.4

対処方法

cd ~/Library/Android/sdk/emulator
* ./emulator -list-avds

Nexus_5X_API_28
Pixel_XL_API_28
  • ./emulator -avd Nexus_5X_API_28 -dns-server 8.8.8.8

という感じでコマンドラインから指定のエミュレータを起動します
コマンドから起動しておいてあとは Android Studio から apk をインストールしたりすれば動作確認できます

どうやら Android Studio 3.x 系だとエミュレータを起動する際に -dns-server オプションが指定できないようです
https://stackoverflow.com/questions/42839734/how-to-set-the-android-emulator-dns-server-from-android-studio

今後できるようになるかもしれません
(もしくは調査不足で実は設定する方法があるかもしれません、、)

あとは Mac 上でメインで使用しいてるネットワーク以外の設定 (Bluetooth PAN や Thunderbolt ブリッジなど) を削除してもできるようです

2017年11月6日月曜日

Super ATOK ULTIAS で定型文を登録する方法

概要

いつも忘れるので手順をメモしておきます

環境

  • Android 6.0.1
  • 端末 FUJITSU F-01J
  • Super ATOK ULTIAS

方法

  1. 設定アプリを開く

atok_ultias_snipet1.png

  1. 言語・文字・入力を選択

atok_ultias_snipet2.png

  1. Super ATOK ULTIAS を選択

atok_ultias_snipet3.png

  1. ユーティリティを選択

atok_ultias_snipet4.png

  1. 定型文ユーティリティを選択

atok_ultias_snipet5.png

  1. メニューから新規作成を選択

atok_ultias_snipet6.png

  1. 定型文として登録したい情報を入力して保存

atok_ultias_snipet7.png

で OK です
あとはキーボードから定型文を選択すれば新規登録した定型文を使用することができます

2017年3月10日金曜日

バレンタインデーに Android の公式アカウントがつぶやいていた 2 進数の意味

概要

バレンタインデーにこんなツイートが Android の公式アカウントからつぶやかれました
st_valentain_android.png

URL : https://twitter.com/Android/status/698884409726996480

なんじゃこりゃと思って回答してみました
ググれば一発ですが、なんとなくメモ

答え

01000010011001010010000001001101011010010110111001100101

をまず 16 進数に変換

4265204D696E65

になった
これを UTF-8 で 16 進数デコードすると答えになる
で答えは

「Be Mine」

ボクのになれってことだから付き合ってくださいってことか
かわいいじゃないか

Rubyでやる

せっかくなので Ruby でやる場合の手順も記載しておきます
irb を使っています

$ irb 
irb(main):001:0> hex_char = "01000010011001010010000001001101011010010110111001100101".to_i(2).to_s(16)
=> "4265204d696e65"
irb(main):002:0> p [hex_char].pack("H*")
"Be Mine"
=> "Be Mine"

こんな感じでいいのだろうか

2017年1月12日木曜日

GL error while resizing: 0x506 (ignored)

概要

Android Studio で作成した AVD を起動したらコンソールにタイトルのエラーが永遠に発生する減少が発生したので対応しました

環境

  • Windows Server 2012 R2 Standard
  • Android Studio 2.2.3

対応方法

「400 x 800 hdpi」のサイズのデバイスで作成し直したらエラーが出なりました
原因は不明ですが環境がクラウド上のリモートデスクトップ環境だったので発生したのかもしれないです

2016年10月26日水曜日

Error:The number of method references in a .dex file cannot exceed 64K.

概要

AndroidStudio で久しぶりにアプリを apk にビルドしてみたら以下のエラーが発生しました

Error:The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html

対処してみたので、その方法を紹介します

環境

  • Mac OS X 10.10.5
  • AndroidStudio 2.1.2
  • Android SDK 24.3.4
  • Build Target API Level 23
  • Java SDK 1.8.0_31-b13

対処方法

build.gradle に以下を追記したら対応できました

multiDexEnabled true

実際に書いた場所は以下の通り (一部抜粋)

defaultConfig {
    applicationId "com.yourdomain.app"
    minSdkVersion 11
    targetSdkVersion 23
    multiDexEnabled true
}

こんな感じで記載してとりあえずビルドしてみたらエラーが出なくなりました

ビルドすると同時に app.iml も更新されたのでもしかすると multiDexEnabled に必要なライブラリをインストールしてくれているのかもしれません