Android getPackageNameでパッケージ名が取得できない原因

こんばんは、ファルコン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()は、プロジェクト作成時設定したパッケージ名を取得するものなのだ。

この関数を使用するときは注意が必要だ。

 

スポンサードリンク



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です