Brew the Mash

クラフトビール好きなITエンジニア@mashmorgan_jpの開発メモなど

【Android】パッケージ名をさっと変更したい場合の手順

Android Studioのプロジェクトで、ベースがあればリネームして別アプリ環境をさっと作りたいなどよくあると思います。 ググってみると割と古い情報が出てきて全部手動で頑張れ、的なものが多かったんですが、Android Studio上でやれば簡単に出来たので個人メモとして残しておきます。

1. パッケージ名を一括リネームする
  • Android Studioの[1:Project]の表示を「Android」にする
  • app - java 以下にあるプロジェクト名(例. com.example.appなど)にカーソル当てて右クリック
  • [Refactor] - [Rename]を選択
  • Warningウィンドウが出ますが気にせず「Rename package」ボタン押す
  • Renameしたい名前を入力し「Refactor」ボタンを押す
  • 画面下の[3:Find]に変換対象のファイル一覧が出るので「Do Refactor」ボタンを押して実行

ファイルの中のパッケージ名はこれで一括変換できます。

2. build.gradleの修正
  • build.gradle(Module: app)のほうを開き、[applicationId]を変更後の名前に修正
  • 画面上に再同期のメッセージが出るので「Sync Now」でgradleを再ビルド
3. アプリ名の修正(必要な場合のみ)
  • アプリ表示名を変える場合は、res/values/strings.xml のapp_name も変更

以上です、非常に簡単ですね!

【Android】RealmをバージョンアップしようとしたらJava8のエラー

Realmを最新(この時点では5.1.0)にあげようとしたところ、以下のようなエラーが。

Error:Error converting bytecode to dex:
Cause: Dex cannot parse version 52 byte code.
This is caused by library dependencies that have been compiled using Java 8 or above.
If you are using the 'java' gradle plugin in a library submodule add 
targetCompatibility = '1.7'
sourceCompatibility = '1.7'
to that submodule's build.gradle file.

いろいろググってみたところ、RealmがJava8依存のコンパイルに変えた事が原因みたい。 Android Studioを3.x にすればこの問題は解決するとのこと。

しかし、自分の開発環境は訳あってAndroid Studio 2.3.3なのだ。。。 そこで最新は諦めてJava8依存前のバージョンまであげることにしました。

(もちろん?)公式サイトには情報がないので、こちらに記載してある内容を参考にしました。

forum.realm.io

結論:Android Studio2.3.xを使ってる人は、Realm 4.2.0までにしといたほうがいいかも

もちろんRetrolambda等で無理やり最新にする方法はあるようですが、やってみたけど上手くいかず、あとbuild.gradleが汚れまくるので止めときました。特別な事情がない限りは、素直にAndroid Studio3.x を使ったほうが良さそうですね。

【Android】1度開いたMapFragmentを再度開こうとするとInflateException

下タブをつけたAndroidアプリを作成しており、各タブはFragmentにしたのですが、MapFragmentを初回は表示できるのに別タブ選択後に再度表示しようとすると以下のエラーが発生。

android.view.InflateException: Binary XML file line #15: Binary XML file line #15: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #15: Error inflating class fragment
Caused by: java.lang.IllegalArgumentException: Binary XML file line #15: Duplicate id 0x7f0f00f3, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment

なんかfragmentの管理が出来てないっぽいけど解決方法がなかなか見つけられず。 すると英語ですがほぼ同じ現象のブログ(下部参考元)を発見!! (本当に有り難いです)

ポイントはViewをstaticで持たせるという点でした。

static View rootView;

viewをstatic化してnullチェックを入れるだけで無事に解決しました。

参考元: Android MapFragment exception when clicked twicecolinyeoh.wordpress.com

【iOS】Xcode9で“no iTunes Connect account” error when uploading が発生

既存のプロジェクトをXCode9でビルドしようとすると、“no iTunes Connect account” error when uploading が発生。

自分はこれで解決しました。

  1. Close xCode
  2. rm -fr ~/Library/Developer/Xcode/DerivedData/
  3. Reopen xCode and try to upload again

stackoverflow.com

【iOS】Swift4対応したらKVOが動かなくなった件

個人メモです。

XCode9にアップデートしてSwift4の自動変換をかましたらKVO関連の処理が動かなくなってしまいました。 addobserverなどで使用している#selectorと#keypathがdeprecateらしく警告されますが、エラーにはならないのでひとまずそのままビルド。 するとどうやらKVOがまったく動作していない模様。。。

結論から言うと自分の確認ミスでした。 Swift4の自動変換をかました際に、dynamicがdeprecatedになったため削除してしまっていたようです。 「@objc dynamic」を追加することで動作確認できました。

// Swift3
dynamic var hoge :String = "aaa"

// Swift4(誤)
var hoge :String = "aaa"

// Swift4(正)
@objc dynamic var hoge :String = "aaa"

KVOはdynamic指定しないと動作しないという基本を忘れていました。。。 Observer処理を全部差し替えすることも考えましたが今回は回避できました。 が、そろそろ時間を見つけて最新対応しなければXCode10あたりで泣きを見ることになりそうです。 (宿題が増える一方ですね)

【Mac】KiCadのFreeRouter(freerouting)でJavaエラーが発生してしまう

先日、KiCadセミナーを受講したのですが、その際にMac環境ならでは?なのか、標題の問題に悩まされました。受講後に調べてなんとか解決できたのでメモがてら記載しておきます。

環境

  • MacOS Sierra 10.12.6
  • KiCad 4.0.7 (stable)
  • Java8 (build1.8.0_144-b01)

KiCadのpcbNewにて、freerouting*1を使おうと思い、事前設定を行いこのサイト からfreerouting.jarをDLして実行してみたが 以下のエラーが発生。

java.lang.ClassException: java.awt.geom.Rectangle2D$Double cannot be cast to java.awt.Rectangle

どうやらJava環境は問題ないみたいだが、jarファイル側の修正が必要そう。

日本語の情報があまりなかったので海外サイトをみてみると、ここにそれっぽい記載が。

https://www.bountysource.com/issues/45463145-java-awt-geom-rectangle2d-double-cannot-be-cast-to-java-awt-rectangle

ここのコメントを参照し、以下より新しいjarファイルを取得したところ私の環境では無事動作しました(回答者はまだ動かないと記載してましたが)。お困りの方いらっしゃればこれで解決できるかと思います。

https://github.com/freerouting/freerouting/files/1282814/freeroute.jar.zip

*1:※FreeRouterとは、KiCadで自動配線してくれる便利ツールです

【iOS】iTunes Connectにアップロードしたはずのビルドが表示されない件

標題の件で小1時間悩んだので結果をメモしておきます。

環境

Archive作成時やiTunes Connectへのアップロード時は特にエラーが表示されずSuccessとなっていましたが、何故かiTunes Connect側のビルドに待っても待っても表示されませんでした。

Appleからのメールを見ればわかったんですが以下の状態でした。

Missing Info.plist key - This app attempts to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.

つまりInfo.plistのPrivacy設定が足りてなかったんです。 (それならビルド時にエラー出して欲しかった。。。)

Info.plistを修正して再度アップロードすると無事にiTunes Connectのビルドに表示されました。