จะรับรหัสแอปพลิเคชัน Android ได้อย่างไร


93

ใน Android ฉันจะรับ id ของแอปพลิเคชันโดยทางโปรแกรมได้อย่างไร (หรือโดยวิธีอื่น) และฉันจะสื่อสารกับแอปพลิเคชันอื่นโดยใช้ id นั้นได้อย่างไร

คำตอบ:


146

หากคุณกำลังมองหาค่าที่กำหนดโดยapplicationIdใน gradle คุณสามารถใช้

BuildConfig.APPLICATION_ID 

30
สิ่งนี้จะไม่เป็นประโยชน์หากคุณกำลังเขียน Android Library
Simon Featherstone

1
ฉันใช้สิ่งนี้เพื่อรับ applicationId ในการทดสอบ Espresso ของฉัน: private val targetContext = instrumentation.getTargetContext () private val applictionId = targetContext.getPackageName ();
a_subscriber

1
@SimonFeatherstone คุณเคยหาวิธีทำจากโมดูลหรือไม่?
Mihai Fischer

1
@MihaiFischer คุณต้องสร้างฟังก์ชันเพื่อเริ่มต้นโมดูล / ไลบรารีและส่งผ่านข้อมูลประเภทนั้น
Simon Featherstone

48

หากapplication idคุณกำลังอ้างถึงpackage nameคุณสามารถใช้เมธอดContext::getPackageName( http: // http: //developer.android.com/reference/android/content/Context.html#getPackageName%28%29 )

ในกรณีที่คุณต้องการสื่อสารกับแอปพลิเคชันอื่นมีหลายวิธี:

  1. เริ่มกิจกรรมของแอปพลิเคชันอื่นและส่งข้อมูลใน "พิเศษ" ของ "เจตจำนง"
  2. ส่งการออกอากาศพร้อมการกระทำ / หมวดหมู่เฉพาะและส่งข้อมูลในส่วนเสริม
  3. หากคุณต้องการแชร์ข้อมูลที่มีโครงสร้างให้ใช้ผู้ให้บริการเนื้อหา
  4. หากแอปพลิเคชันอื่นจำเป็นต้องทำงานอย่างต่อเนื่องในพื้นหลังให้ใช้เซิร์ฟเวอร์และ "ผูก" ตัวเองเข้ากับบริการ

หากคุณสามารถอธิบายความต้องการของคุณได้อย่างละเอียดชุมชนก็จะสามารถช่วยเหลือคุณได้ดีขึ้น


จะเกิดอะไรขึ้นหากฉันต้องการแสดงรายการแอพและจำเป็นต้องมี id เป็นจำนวนเต็มเหมือนกับที่รายการอะแดปเตอร์ทั้งหมดต้องการ ฉันสามารถใช้เวลาในการติดตั้งได้ แต่มันใช้เวลานาน การแคสต์เป็น int ยังช่วยได้ไหม
นักพัฒนา Android

4
ชื่อแพ็กเกจไม่ใช่ applicationId เสมอไปเมื่อคุณตั้งค่าผ่าน build.gradle!
Jemshit Iskenderov

3
จริงๆแล้วContext.getPackageName() จะส่งคืน ID แอปพลิเคชันไม่ใช่ชื่อแพ็กเกจ (แม้ว่าโดยปกติจะเหมือนกันก็ตาม) ชื่อที่ค่อนข้างสับสนของวิธีนี้เป็นแบบดั้งเดิม ที่มา: developer.android.com/studio/build/application-id
LoPoBo

บริบท :: getPackageName ไม่ทำงานหากคุณใช้ kotlin มันจะส่งคืน "function getPackageName (ไม่มีการสะท้อนของ Kotlin)"
Derek Zhu

6

ฉันไม่แน่ใจว่า "รหัสแอปพลิเคชัน" ที่คุณอ้างถึงคืออะไร แต่สำหรับตัวระบุเฉพาะของแอปพลิเคชันของคุณคุณสามารถใช้:

getApplication (). getPackageName () วิธีการจากกิจกรรมปัจจุบันของคุณ


2
แอปพลิเคชันที่ติดตั้งแต่ละตัวมีรหัสที่ไม่ซ้ำกัน ... เป็นไปได้หรือไม่ที่จะได้รับรหัสเฉพาะของแอปพลิเคชันจากแอปพลิเคชันอื่น
arams

3
ไม่ใช่getApplicationContext().getPackageName()เหรอ?
superarts.org

สมมติว่าคุณมีประเภทบิวด์เช่นรีลีสหรือดีบักและคุณได้เพิ่มส่วนต่อท้ายตัวอย่างเช่น "debug" เพื่อแยกความแตกต่างจากแอปพลิเคชันหลักในกรณีนั้น getpackageName () จะให้ originalpackagename.debug แก่คุณ
Aman Verma


2

ขั้นตอนที่ 1: เปิด Google Play Store

ขั้นตอนที่ 2: เปิดแอพใดก็ได้ใน App Store ตัวอย่าง: facebook

ขั้นตอนที่ 3: คลิกที่แอพใดก็ได้และดูที่ลิงค์เบราว์เซอร์และ At the End id = com.facebook.katana & hl = thจะอยู่ที่นั่นและนี่คือรหัสเฉพาะแอพของคุณ


1

คุณจะได้รับรหัสกระบวนการที่แอปพลิเคชันของคุณทำงานใน:

สุดท้ายคง int android.os.Process.myPid ()
ส่งคืนตัวระบุของกระบวนการนี้ซึ่งสามารถใช้ได้กับ killProcess (int) และ sendSignal (int, int)


1

ฉันไม่แน่ใจว่าคุณต้องการรหัสแอป / การติดตั้งเพื่ออะไร แต่คุณสามารถตรวจสอบความเป็นไปได้ที่มีอยู่ในบทความดีๆจากนักพัฒนา Android:

สรุป:

  • UUID.randomUUID() สำหรับการสร้าง id ในครั้งแรกที่แอปทำงานหลังจากการติดตั้งและการเรียกคืนอย่างง่ายในภายหลัง
  • TelephonyManager.getDeviceId() สำหรับตัวระบุอุปกรณ์จริง
  • Settings.Secure.ANDROID_ID บนอุปกรณ์ที่ค่อนข้างทันสมัย

0

PackageInfo.sharedUserIdฟิลด์จะแสดง ID ผู้ใช้ที่ได้รับมอบหมายในไฟล์ Manifest

หากคุณต้องการให้สองแอปพลิเคชันมี userId เดียวกันเพื่อให้สามารถเห็นข้อมูลของกันและกันและเรียกใช้ในกระบวนการเดียวกันจากนั้นกำหนด userId เดียวกันในรายการ:

android:sharedUserId="string"

สองแพ็คเกจที่มี sharedUserId เดียวกันจำเป็นต้องมีลายเซ็นเดียวกันด้วย

ฉันอยากจะแนะนำให้อ่านที่นี่เพื่อเขยิบไปในทิศทางที่ถูกต้อง


2 แอปพลิเคชันที่แตกต่างกันใช้ชื่อแพ็กเกจเดียวกันหมายถึงแอปพลิเคชันสามารถแชร์ข้อมูลได้หรือไม่ ...
arams

ไม่หากสองแอปพลิเคชันมี shareUserId เดียวกันและลงนามด้วยลายเซ็นเดียวกันจะสามารถแชร์ข้อมูลได้ ชื่อแพ็กเกจไม่ใช่ปัญหา
Will

0

หากจุดประสงค์ทั้งหมดคือการสื่อสารข้อมูลกับแอปพลิเคชันอื่น ๆ ให้ใช้เมธอด sendBroadcast ของ Intent


0

หากคุณใช้ระบบสร้าง ** Gradle ใหม่getPackageNameจะส่งคืนรหัสแอปพลิเคชันอย่างผิดปกติไม่ใช่ชื่อแพ็คเกจ ดังนั้นคำตอบของ MasterGaurav จึงถูกต้อง แต่เขาไม่จำเป็นต้องเริ่มต้นด้วย ++

หากตามรหัสแอปพลิเคชันคุณหมายถึงชื่อแพ็คเกจ ...

ดูเพิ่มเติมเกี่ยวกับความแตกต่างที่นี่

** ไม่ใช่เรื่องใหม่ในตอนนี้

++ ฉันตระหนักดีว่าคำตอบของเขาเหมาะสมอย่างยิ่งในปี 2554


0

Android App ES File Explorer แสดงชื่อแพ็กเกจ Android ในส่วน User Apps ซึ่งมีประโยชน์สำหรับ Bitwarden Bitwarden เรียกสิ่งนี้ว่า "รหัสแพ็กเกจแอปพลิเคชัน android (หรือชื่อแพ็กเกจ)"


0

ในการติดตามการติดตั้งตัวอย่างเช่นคุณสามารถใช้ UUID เป็นตัวระบุและสร้างใหม่ในครั้งแรกที่แอปทำงานหลังจากการติดตั้ง นี่คือภาพร่างของคลาสชื่อ“ การติดตั้ง” ด้วยวิธีการหนึ่งแบบคงที่ Installation.id (บริบทบริบท) คุณสามารถจินตนาการถึงการเขียนข้อมูลเฉพาะการติดตั้งเพิ่มเติมลงในไฟล์การติดตั้ง

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();
}

}

สามารถดูเพิ่มเติมได้ที่https://github.com/MShoaibAkram/Android-Unique-Application-ID


0

สำหรับการรับ AppId (หรือชื่อแพ็คเกจบางคนพูดว่าอย่างไร) ให้เรียกสิ่งนี้:

แต่ต้องแน่ใจว่าคุณนำเข้าBuildConfigด้วยเส้นทางแพ็กเกจ id ของแอป

BuildConfig.APPLICATION_ID 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.