こんばんは、ファルコンMです。
Android アプリ開発をしていて、getPackageName() 関数で想定通りのパッケージ名を取得できていない人
getPackageName() 関数で想定通りのパッケージ名を取得できないという現象が発生した。
その原因は、AndroidManifest.xml を見れば、分かるかも。
getPackageName() で取得できるパッケージ名が想定通りでない
まず、以下のコードを見てほしい。
ChildActivity.java
package com.falconm.packagesample.sample.child; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.falconm.packagesample.sample.R; public class ChildActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_child); String packageName = getPackageName(); } }
Android のアクティビティの基本コード。
15行目でgetPackageName() を実行する。
本来ならば、packageName に このソースの1行目と同じ値の “com.falconm.packagesample.sample.child” が代入されていてほしい。
だが、”com.falconm.packagesample.sample” となっていた。
.child が抜けている。
getPackageName() はAndroidManifest.xml の値が取得されるようだ
それで、Project のツリーを見ていると、下のようなっていた。
プロジェクト作成時、com.falconm.packagesample.sample をパッケージ名に設定していた。child を新しく追加した。
もしかして、それが関係しているのかな?
それで、AndroidManifest.xml を見てみる。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.falconm.packagesample.sample"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".child.ChildActivity"></activity> </application> </manifest>
2行目のpackage が “com.falconm.packagesample.sample” となっている。これが取得されているようだ。
ChildActivity.java で getComponentName().getShortClassName() をやってみると、”.child.ChildActivity” を取得した。
この辺の関数は、AndroidManifest.xml に書かれているものを取得していることが分かった。
まとめ
getPackageName() 関数で想定通りのパッケージ名を取得できない現象が発生した。
そもそもgetPackageName()は、プロジェクト作成時設定したパッケージ名を取得するものなのだ。
この関数を使用するときは注意が必要だ。
コメントを残す