Android 애플리케이션 ID를 얻는 방법은 무엇입니까?


92

Android에서 프로그래밍 방식으로 (또는 다른 방법으로) 애플리케이션의 ID를 얻는 방법과 해당 ID를 사용하여 다른 애플리케이션과 통신하려면 어떻게해야합니까?

답변:


145

applicationIdgradle에서 정의한 값을 찾고 있다면 간단히 사용할 수 있습니다.

BuildConfig.APPLICATION_ID 

30
당신이 안드로이드 라이브러리 작성하는 경우에 매우 유용하지 않을 것입니다
사이먼 페더

내 Espresso 테스트에서 applicationId를 가져 오는 데 사용합니다. private val targetContext = instrumentation.getTargetContext () private val applictionId = targetContext.getPackageName ();
a_subscriber

@SimonFeatherstone 모듈에서 수행하는 방법을 알아 냈습니까?
Mihai Fischer 19

@MihaiFischer는 모듈 / 라이브러리를 초기화하고 그런 종류의 정보를 전달하는 함수를 만들어야합니다.
Simon Featherstone

48

application id의해을 참조 package name하는 경우 메서드 Context::getPackageName( http : // http : //developer.android.com/reference/android/content/Context.html#getPackageName%28%29 )를 사용할 수 있습니다 .

다른 응용 프로그램과 통신하려는 경우 여러 가지 방법이 있습니다.

  1. 다른 애플리케이션의 활동을 시작하고 "Intent"의 "Extras"에 데이터를 보냅니다.
  2. 특정 액션 / 카테고리와 함께 방송을 보내고 엑스트라에 데이터를 보냅니다.
  3. 구조화 된 데이터 만 공유해야하는 경우 콘텐츠 제공 업체를 사용하세요.
  4. 다른 응용 프로그램이 백그라운드에서 계속 실행되어야하는 경우 서버를 사용하고 서비스에 자신을 "바인딩"합니다.

정확한 요구 사항을 자세히 설명 할 수 있다면 커뮤니티에서 더 잘 도울 수 있습니다.


모든 목록 어댑터가 필요로하는 것처럼 앱 목록을 표시하고 ID를 정수로 가져야하는 경우 어떻게해야합니까? 설치 시간을 사용할 수는 있지만 긴 유형입니다. int로 캐스팅하면 여전히 도움이 될까요?
안드로이드 개발자

4
build.gradle을 통해 설정할 때 패키지 이름이 항상 applicationId는 아닙니다!
Jemshit Iskenderov

2
실제로 Context.getPackageName() 않는 응용 프로그램 ID 반환 하지 (그들은 일반적으로 동일하지만) 패키지 이름을. 이 방법의 다소 혼란스러운 이름은 레거시입니다. 출처 : developer.android.com/studio/build/application-id
LoPoBo

Context :: getPackageName은 kotlin을 사용하는 경우 작동하지 않고 "function getPackageName (Kotlin 리플렉션을 사용할 수 없음)"을 반환합니다.
Derek Zhu

6

"애플리케이션 ID"가 무엇인지 잘 모르겠지만 애플리케이션의 고유 식별자로 사용할 수 있습니다.

현재 활동의 getApplication (). getPackageName () 메서드


2
설치된 각 응용 프로그램은 다른 응용 프로그램에서 응용 프로그램의 고유 ID를 얻을 수 있습니다 ... 고유 ID를 가지고
arams

3
그렇지 getApplicationContext().getPackageName()않습니까?
superarts.org

릴리스 또는 디버그와 같은 빌드 유형이 있고 기본 애플리케이션과 구별하기 위해 "debug"와 같은 접미사를 추가했다고 가정합니다.이 경우 getpackageName ()은 originalpackagename.debug
Aman Verma



1

그렇지 않으면 애플리케이션이 실행되는 프로세스의 ID를 얻을 수 있습니다.

final static int android.os.Process.myPid ()
killProcess (int) 및 sendSignal (int, int)와 함께 사용할 수있는이 프로세스의 식별자를 반환합니다.


1

앱 / 설치 ID가 무엇에 필요한지 잘 모르겠지만 Android 개발자의 훌륭한 기사에서 기존 가능성을 검토 할 수 있습니다.

요약하자면 :

  • UUID.randomUUID() 설치 후 앱이 처음 실행될 때 ID를 생성하고 이후에 간단한 검색을 위해
  • TelephonyManager.getDeviceId() 실제 기기 식별자
  • Settings.Secure.ANDROID_ID 비교적 현대적인 기기에서

0

PackageInfo.sharedUserId필드는 사용자 ID가 표시됩니다 매니페스트에 할당을 .

두 애플리케이션이 동일한 userId를 갖도록하여 서로의 데이터를보고 동일한 프로세스에서 실행할 수 있도록하려면 매니페스트에서 동일한 userId를 할당합니다.

android:sharedUserId="string"

sharedUserId가 동일한 두 패키지도 동일한 서명을 가져야합니다.

나는 또한 올바른 방향으로 넛지하기 위해 여기 를 읽는 것이 좋습니다 .


2 개의 다른 응용 프로그램은 동일한 패키지 이름 수단, 응용 프로그램이 데이터를 공유 할 수 있습니다 ...?
arams

아니요. 두 응용 프로그램이 동일한 shareUserId를 갖고 있고 동일한 서명으로 서명 된 경우 데이터를 공유 할 수 있습니다. 패키지 이름은 문제가되지 않습니다.

0

전체 목적이 다른 애플리케이션과 데이터를 통신하는 것이라면 Intent의 sendBroadcast 메소드를 사용하세요.


0

새로운 ** Gradle 빌드 시스템을 사용하는 경우 getPackageName이상하게도 패키지 이름이 아닌 애플리케이션 ID가 반환됩니다. 따라서 MasterGaurav의 대답은 정확하지만 ++로 시작할 필요는 없습니다.

애플리케이션 ID로 패키지 이름을 참조하는 경우 ...

여기 에서 차이점에 대해 자세히 알아 보십시오 .

**이 시점에서 그렇게 새로운 것은 아닙니다

++ 나는 그의 대답이 2011 년에 완벽하게 이해되었다는 것을 알고 있습니다.


0

Android App ES 파일 탐색기는 Bitwarden에 유용한 사용자 앱 섹션에 Android 패키지 이름을 표시합니다. Bitwarden은이를 "안드로이드 애플리케이션 패키지 ID (또는 패키지 이름)"라고합니다.


0

예를 들어 설치를 추적하기 위해 UUID를 식별자로 사용하고 설치 후 앱이 처음 실행될 때 새로 만들 수 있습니다. 다음은 하나의 정적 메서드 Installation.id (컨텍스트 컨텍스트)가있는 "Installation"이라는 클래스의 스케치입니다. 더 많은 설치 관련 데이터를 INSTALLATION 파일에 쓰는 것을 상상할 수 있습니다.

public class Installation {
private static String sID = null;
private static final String INSTALLATION = "INSTALLATION";
public synchronized static String id(Context context) {

    if (sID == null) {  
       File installation = new File(context.getFilesDir(), INSTALLATION);
       try {
           if (!installation.exists())
               writeInstallationFile(installation);
           sID = readInstallationFile(installation);
       } catch (Exception e) {
           throw new RuntimeException(e);
       }
    }
   return sID;
}

private static String readInstallationFile(File installation) throws IOException {
   RandomAccessFile f = new RandomAccessFile(installation, "r");
   byte[] bytes = new byte[(int) f.length()];
   f.readFully(bytes);
   f.close();
   return new String(bytes);
}

private static void writeInstallationFile(File installation) throws IOException {
   FileOutputStream out = new FileOutputStream(installation);
   String id = UUID.randomUUID().toString();
   out.write(id.getBytes());
   out.close();
}

}

Yon은 https://github.com/MShoaibAkram/Android-Unique-Application-ID 에서 더 많은 것을 볼 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.