Androidアプリ作れるようになりたい(その3)スマホの現在位置の経緯度を画面に表示
カテゴリー:Androidアプリ製作(記事数:3)

2025.12.23

EXPO+ReactNativeでの新規プロジェクトの作り方が3年前に調べた時と変更になっている。

npx create-expo-app xxxxxxx(プロジェクト名)xxxxx

で現在のフォルダにプロジェクト名のフォルダが出来て中に開発環境が出来る。このコマンドを実行するにはネット接続が必要。そして空のプロジェクトでもファイル数2万、フォルダ数4000、合計容量200MBがコピーされる。なんて無駄な・・・出来上がりのテンプレートアプリのapkファイルが80メガバイトあるはずだ・・・

オプション無しで新規プロジェクトを作ると色々とタブ構造によるメニューとか色々と入ったt年プレートの空プロジェクトが出来てしまうので
npx create-expo-app xxxxxxx(プロジェクト名)xxxxx --template blank

として作ると実行時1画面のapp.jsのみのシンプルなプロジェクトが作成される。

ミニマムプログラム例1(ボタンを押すと数字が増える)


  • expo-status-barは使って無いし不要かもしれない。
  • export default function App(){}ってのが起動時に1度だけ(繰り返し?)実行される部分らしい。
  • useStateってのが変数を使うために必要なライブラリー?
  • const[count, setCount]=useState(5)ってのでcountという変数が初期値=5で作られるようだ、この言語ではcountを変更したい時はsetCountを呼び出す。残りのコードはJavaScriptっぽい。ボタンを押すとcountの値が1増えて、表示も変更される。
↓実行した画面




ミニマムプログラム例2(現在位置の経緯度を表示)
import React, { useState, useEffect } from 'react';
import { Text, View, StyleSheet } from 'react-native';
import * as Location from 'expo-location';

export default function App() {
const [location, setLocation] = useState(null);
const [errorMsg, setErrorMsg] = useState(null);

useEffect(() => {
(async () => {
// 1. 位置情報の使用許可をリクエスト
let { status } = await Location.requestForegroundPermissionsAsync();
if (status !== 'granted') {
setErrorMsg('位置情報の使用許可が拒否されました。');
return;
}

// 2. 現在位置を取得
let currentLocation = await Location.getCurrentPositionAsync({});
setLocation(currentLocation);
})();
}, []);

let text = '取得中...';
if (errorMsg) {
text = errorMsg;
} else if (location) {
text = `緯度: ${location.coords.latitude}\n経度: ${location.coords.longitude}`;
}

return (

{text}

);
}

const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
padding: 20,
},
paragraph: {
fontSize: 18,
textAlign: 'center',
},
});


↓実行した画面



最初に
npx expo install expo-location

でexpo-locationをインストールするのが必要。上記でアプリに位置情報の取得権限も撮ってくれる。useEffetとかasyncとかが入力待ち?よく分からん。
  • このサンプル2にはサンプル1にあった「expo-status-bar」がimportされてないので必須ではないっぽい。
これは起動時に一度だけ取得してもう変更されないんだよね?未確認。
  • サンプルプログラム1に合ったuseStateに加え、useEffectってのがインポートされている。調べると今回の使い方では第二変数が[]なので起動時に1回だけ実行されるっぽい。これを引数無しにすると全ての再レンダリング後に実行したり、何かのトリガーがあるたびに実行したり出来るみたい。
  • buildはeas loginして、eas buildってやると環境設定からbuildまでいっきにやるみたい。以前やっていたeas build:configureってやると環境設定のみを行う。ちなみにアプリIDは「com.fetuin.mynewproject4」みたいなのがついていた。Buildはクラウド上でやるらしく順番待ちがあると何十分も待たされる。
結論としてeas.jsonにbuildtypeをきちんと記載しておいて
eas build --platform android --profile development

とするとapkファイルが出来る。

Category:Androidアプリ製作


■ ■ ■ コメント ■ ■ ■

いいっすね!=42
001 [12/23 15:36]通りすがりやん:スゴイ!昔の Android Studio とはだいぶ違うんだね。 (5)
002 [12/23 18:45]j@BM:普通にAndroid studioでプレーンな環境で作らないのはなぜ?? この方法は確かに簡単かもしれないけどいろいろ跳ね返り多そう (6)
003 [12/23 20:53]F@Dion:ReactNativeは使ったことないけど作りたてのプロジェクトで80MBのapkになるの?でかすぎる…JAVAとかなら5MBくらいかなぁ?あとaabにならんの? (7)
004 [12/24 09:45]ふぇちゅいん(中受パパ) TW★98:>>003 デフォルトはaabファイルが出来るよ、今回はあえてapkファイル作る設定にしている。>>002 Android Studioを選ばなかったのは「将来的にiOSアプリも作りたい」「Javaはあまり経験無い」「環境をインストールするのが面倒」って感じかな。深い意味は無いです。 (3)
005 [12/25 00:15]F@Dion:なるほどあえてapkだったか。試しにflutterを入れてみてプロジェクト作ってapkを作ってみたら40MBもあった、ReactNativeもそうだが色々要らんもの削れば減るのかな、使ってないんでわからん。JavaScriptにこだわるならionicやcordova、monacaとかもどうかな、だいぶ前にcordovaはちょっとだけ使ったが当時コンパイルサイズは15MBほどだったかも。余談だがJavaで極限まで削って16KBのAPKを作ったことがある、もちろんちゃんと機能するやつでね。まぁサイズ云々よりとりあえず完成まで1度は作ってみるといいかな。 (5)
006 [12/25 10:21]ふぇちゅいん(中受パパ) TW★98:>>005 まあもう配布サイズにこだわる時代では無いのかもよ。ふとThredsのアプリサイズ見たらバカでかいね。React Native製なのかも。 (3)
007 [12/25 10:32]通りすがりやん:>>004「環境をインストールするのが面倒」それ言えてるね。あと大金持ちの前澤さんがお金ばらまきアプリ作る時、Xに投稿していたんだけど、Kotlin (フレームワーク: Kotlin Multiplatform Mobile (KMM))KotlinはAndroidアプリの公式推奨言語ですが、KMMを使用することで、ロジック部分をiOSとAndroidで共通化し、UIはそれぞれのOSのネイティブUIで構築できます。高いパフォーマンスと自然な操作感を両立できます。 」とかあるらしいけど、今は他にもたくさんあるんだね。 (3)

名前 ↑B
[Xの該当記事にコメントを付ける]
コメント(※改行は省略されます)

※3回以上の連続書き込み不可
この記事のアクセス数:

本カテゴリーで直近コメントが書かれた記事


→カテゴリー:Androidアプリ製作(記事数:3)
本カテゴリーの最近の記事(コメント数)