어디서든 패키지 이름을 가져오는 방법은 무엇입니까?
Context.getApplicationContext() 및 View.getContext()의 가용성을 알고 있으며, 이를 통해 Context.getPackageName()을 호출하여 응용 프로그램의 패키지 이름을 검색할 수 있습니다.
그들은 만약 내가 전화를 걸면 작동합니다.View
또는Activity
객체를 사용할 수 있지만, 만약 내가 전혀 독립적인 클래스에서 패키지 이름을 찾고 싶다면.View
또는Activity
그렇게 하는 방법이 있습니까? (직관적이거나 간접적으로)?
기본 활동에서 정적 변수를 패키지 이름으로 인스턴스화하는 것이 좋습니다.그런 다음 변수를 참조하십시오.
기본 활동의 초기화 작업을 수행해야 합니다.onCreate()
방법:
클래스에 대한 글로벌:
public static String PACKAGE_NAME;
그럼..
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
PACKAGE_NAME = getApplicationContext().getPackageName();
}
그러면 다음을 통해 액세스할 수 있습니다.Main.PACKAGE_NAME
.
Gradle-Android-plugin을 사용하여 앱을 구축하면 다음을 사용할 수 있습니다.
BuildConfig.APPLICATION_ID
정적 범위를 포함하여 모든 범위에서 패키지 이름을 검색합니다.
"어디서나"라는 단어를 사용하면 명시적으로 사용하지 않아도 됩니다.Context
(예를 들어 백그라운드 스레드에서) 프로젝트에서 클래스를 다음과 같이 정의해야 합니다.
public class MyApp extends Application {
private static MyApp instance;
public static MyApp getInstance() {
return instance;
}
public static Context getContext(){
return instance;
// or return instance.getApplicationContext();
}
@Override
public void onCreate() {
instance = this;
super.onCreate();
}
}
그럼 당신의manifest
이 클래스를 에 추가해야 합니다.Name
의 필드Application
tab. 또는 xml을 편집하여 입력합니다.
<application
android:name="com.example.app.MyApp"
android:icon="@drawable/icon"
android:label="@string/app_name"
.......
<activity
......
그리고 당신이 전화할 수 있는 곳이면 어디든
String packagename= MyApp.getContext().getPackageName();
도움이 되길 바랍니다.
그래들 빌드를 사용하는 경우 다음을 사용합니다.BuildConfig.APPLICATION_ID
응용 프로그램의 패키지 이름을 가져옵니다.
@Billda가 언급했듯이 Gradle을 사용하는 사람들은 다음을 통해 패키지 이름을 얻을 수 있습니다.
BuildConfig.APPLICATION_ID
이렇게 하면 앱 그라들에 선언된 패키지 이름이 제공됩니다.
android {
defaultConfig {
applicationId "com.domain.www"
}
}
Java 클래스에서 사용하는 패키지 이름을 얻고자 하는 경우(때로는 다음과 다른 경우도 있음)applicationId
), 를 사용할 수 있습니다.
BuildConfig.class.getPackage().toString()
어떤 것을 사용해야 할지 헷갈릴 경우 여기를 읽어 보십시오.
참고: 응용 프로그램 ID는 코드의 패키지 이름과 직접 연결되어 있으므로 일부 Android API는 메서드 이름과 매개 변수 이름에 "패키지 이름"이라는 용어를 사용하지만, 이는 실제로 사용자의 응용 프로그램 ID입니다.예를 들어 Context.getPackageName() 메서드는 응용 프로그램 ID를 반환합니다.앱 코드 외부에서 코드의 실제 패키지 이름을 공유할 필요가 없습니다.
이 코드를 사용하십시오.
val packageName = context.packageName
private String getApplicationName(Context context, String data, int flag) {
final PackageManager pckManager = context.getPackageManager();
ApplicationInfo applicationInformation;
try {
applicationInformation = pckManager.getApplicationInfo(data, flag);
} catch (PackageManager.NameNotFoundException e) {
applicationInformation = null;
}
final String applicationName = (String) (applicationInformation != null ? pckManager.getApplicationLabel(applicationInformation) : "(unknown)");
return applicationName;
}
패키지 이름은 다음과 같이 얻을 수 있습니다.
$ /path/to/adb shell 'pm list packages -f myapp'
package:/data/app/mycompany.myapp-2.apk=mycompany.myapp
다음은 옵션입니다.
$ adb
Android Debug Bridge version 1.0.32
Revision 09a0d98bebce-android
-a - directs adb to listen on all interfaces for a connection
-d - directs command to the only connected USB device
returns an error if more than one USB device is present.
-e - directs command to the only running emulator.
returns an error if more than one emulator is running.
-s <specific device> - directs command to the device or emulator with the given
serial number or qualifier. Overrides ANDROID_SERIAL
environment variable.
-p <product name or path> - simple product name like 'sooner', or
a relative/absolute path to a product
out directory like 'out/target/product/sooner'.
If -p is not specified, the ANDROID_PRODUCT_OUT
environment variable is used, which must
be an absolute path.
-H - Name of adb server host (default: localhost)
-P - Port of adb server (default: 5037)
devices [-l] - list all connected devices
('-l' will also list device qualifiers)
connect <host>[:<port>] - connect to a device via TCP/IP
Port 5555 is used by default if no port number is specified.
disconnect [<host>[:<port>]] - disconnect from a TCP/IP device.
Port 5555 is used by default if no port number is specified.
Using this command with no additional arguments
will disconnect from all connected TCP/IP devices.
device commands:
adb push [-p] <local> <remote>
- copy file/dir to device
('-p' to display the transfer progress)
adb pull [-p] [-a] <remote> [<local>]
- copy file/dir from device
('-p' to display the transfer progress)
('-a' means copy timestamp and mode)
adb sync [ <directory> ] - copy host->device only if changed
(-l means list but don't copy)
adb shell - run remote shell interactively
adb shell <command> - run remote shell command
adb emu <command> - run emulator console command
adb logcat [ <filter-spec> ] - View device log
adb forward --list - list all forward socket connections.
the format is a list of lines with the following format:
<serial> " " <local> " " <remote> "\n"
adb forward <local> <remote> - forward socket connections
forward specs are one of:
tcp:<port>
localabstract:<unix domain socket name>
localreserved:<unix domain socket name>
localfilesystem:<unix domain socket name>
dev:<character device name>
jdwp:<process pid> (remote only)
adb forward --no-rebind <local> <remote>
- same as 'adb forward <local> <remote>' but fails
if <local> is already forwarded
adb forward --remove <local> - remove a specific forward socket connection
adb forward --remove-all - remove all forward socket connections
adb reverse --list - list all reverse socket connections from device
adb reverse <remote> <local> - reverse socket connections
reverse specs are one of:
tcp:<port>
localabstract:<unix domain socket name>
localreserved:<unix domain socket name>
localfilesystem:<unix domain socket name>
adb reverse --norebind <remote> <local>
- same as 'adb reverse <remote> <local>' but fails
if <remote> is already reversed.
adb reverse --remove <remote>
- remove a specific reversed socket connection
adb reverse --remove-all - remove all reversed socket connections from device
adb jdwp - list PIDs of processes hosting a JDWP transport
adb install [-lrtsdg] <file>
- push this package file to the device and install it
(-l: forward lock application)
(-r: replace existing application)
(-t: allow test packages)
(-s: install application on sdcard)
(-d: allow version code downgrade)
(-g: grant all runtime permissions)
adb install-multiple [-lrtsdpg] <file...>
- push this package file to the device and install it
(-l: forward lock application)
(-r: replace existing application)
(-t: allow test packages)
(-s: install application on sdcard)
(-d: allow version code downgrade)
(-p: partial application install)
(-g: grant all runtime permissions)
adb uninstall [-k] <package> - remove this app package from the device
('-k' means keep the data and cache directories)
adb bugreport - return all information from the device
that should be included in a bug report.
adb backup [-f <file>] [-apk|-noapk] [-obb|-noobb] [-shared|-noshared] [-all] [-system|-nosystem] [<packages...>]
- write an archive of the device's data to <file>.
If no -f option is supplied then the data is written
to "backup.ab" in the current directory.
(-apk|-noapk enable/disable backup of the .apks themselves
in the archive; the default is noapk.)
(-obb|-noobb enable/disable backup of any installed apk expansion
(aka .obb) files associated with each application; the default
is noobb.)
(-shared|-noshared enable/disable backup of the device's
shared storage / SD card contents; the default is noshared.)
(-all means to back up all installed applications)
(-system|-nosystem toggles whether -all automatically includes
system applications; the default is to include system apps)
(<packages...> is the list of applications to be backed up. If
the -all or -shared flags are passed, then the package
list is optional. Applications explicitly given on the
command line will be included even if -nosystem would
ordinarily cause them to be omitted.)
adb restore <file> - restore device contents from the <file> backup archive
adb disable-verity - disable dm-verity checking on USERDEBUG builds
adb enable-verity - re-enable dm-verity checking on USERDEBUG builds
adb keygen <file> - generate adb public/private key. The private key is stored in <file>,
and the public key is stored in <file>.pub. Any existing files
are overwritten.
adb help - show this help message
adb version - show version num
scripting:
adb wait-for-device - block until device is online
adb start-server - ensure that there is a server running
adb kill-server - kill the server if it is running
adb get-state - prints: offline | bootloader | device
adb get-serialno - prints: <serial-number>
adb get-devpath - prints: <device-path>
adb remount - remounts the /system, /vendor (if present) and /oem (if present) partitions on the device read-write
adb reboot [bootloader|recovery]
- reboots the device, optionally into the bootloader or recovery program.
adb reboot sideload - reboots the device into the sideload mode in recovery program (adb root required).
adb reboot sideload-auto-reboot
- reboots into the sideload mode, then reboots automatically after the sideload regardless of the result.
adb sideload <file> - sideloads the given package
adb root - restarts the adbd daemon with root permissions
adb unroot - restarts the adbd daemon without root permissions
adb usb - restarts the adbd daemon listening on USB
adb tcpip <port> - restarts the adbd daemon listening on TCP on the specified port
networking:
adb ppp <tty> [parameters] - Run PPP over USB.
Note: you should not automatically start a PPP connection.
<tty> refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1
[parameters] - Eg. defaultroute debug dump local notty usepeerdns
adb sync notes: adb sync [ <directory> ]
<localdir> can be interpreted in several ways:
- If <directory> is not specified, /system, /vendor (if present), /oem (if present) and /data partitions will be updated.
- If it is "system", "vendor", "oem" or "data", only the corresponding partition
is updated.
environment variables:
ADB_TRACE - Print debug information. A comma separated list of the following values
1 or all, adb, sockets, packets, rwx, usb, sync, sysdeps, transport, jdwp
ANDROID_SERIAL - The serial number to connect to. -s takes priority over this if given.
ANDROID_LOG_TAGS - When used with the logcat option, only these debug tags are printed.
문서화되지 않은 방법을 사용할 수 있습니다.android.app.ActivityThread.currentPackageName()
:
Class<?> clazz = Class.forName("android.app.ActivityThread");
Method method = clazz.getDeclaredMethod("currentPackageName", null);
String appPackageName = (String) method.invoke(clazz, null);
주의: 응용 프로그램의 메인 스레드에서 이 작업을 수행해야 합니다.
이 아이디어에 대한 블로그 게시물 http://blog.javia.org/static-the-android-application-package/ 에 감사드립니다.
PackageInfo pinfo = this.getPackageManager().getPackageInfo(getPackageName(), 0);
String sVersionCode = pinfo.versionCode; // 1
String sVersionName = pinfo.versionName; // 1.0
String sPackName = getPackageName(); // cz.okhelp.my_app
int nSdkVersion = Integer.parseInt(Build.VERSION.SDK);
int nSdkVers = Build.VERSION.SDK_INT;
효과가 있기를 바랍니다.
사용: BuildConfig.APPLICATION_ID를 사용하여 모든 위치(즉, 서비스, 수신기, 활동, 조각 등)에서 패키지 이름을 가져옵니다.
예:문자열 패키지 이름 = BuildConfig.APPLICATION_ID;
앱을 시작할 때 처음 실행할 Java 모듈을 만듭니다.이 모듈은 안드로이드 애플리케이션 클래스를 확장하고 모든 글로벌 앱 변수를 초기화하며 앱 전체 유틸리티 루틴도 포함합니다.
public class MyApplicationName extends Application {
private final String PACKAGE_NAME = "com.mysite.myAppPackageName";
public String getPackageName() { return PACKAGE_NAME; }
}
물론 여기에는 Android 시스템에서 패키지 이름을 가져오는 논리가 포함될 수 있지만 위의 코드는 Android에서 가져오는 것보다 더 작고 빠르고 깨끗합니다.
활동을 실행하기 전에 AndroidManifest.xml 파일에 다음과 같이 입력하여 Android에게 응용 프로그램 모듈을 실행하도록 하십시오.
<application
android:name=".MyApplicationName"
...
>
그런 다음 다른 모듈에서 패키지 이름을 가져오려면 다음과 같이 입력합니다.
MyApp myApp = (MyApp) getApplicationContext();
String myPackage = myApp.getPackageName();
응용프로그램 모듈을 사용하면 컨텍스트가 필요하지만 컨텍스트가 없는 모듈에 대한 컨텍스트도 제공됩니다.
Android.app만 가져오면 다음을 사용할 수 있습니다.<br/>Application.getProcessName()<br/>
컨텍스트, 보기 또는 활동 없이 현재 응용프로그램 프로세스 이름을 가져옵니다.
BuildConfig.APPLICATION_ID와 패키지가 항상 같지는 않을 수 있습니다."buildConfigField"를 사용하여 패키지를 BuildConfig에 추가하고 BuildConfig로 액세스합니다.패키지. https://developer.android.com/studio/build/gradle-tips
defaultConfig {
applicationId "com.example.app.name"
minSdkVersion 24
targetSdkVersion 29
versionCode 1
versionName '0.1.0'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
buildConfigField("String", "PACKAGE", "\"com.example.app\"")
}
이것은 코틀린에서 나에게 효과가 있습니다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var packageName=applicationContext.packageName // need to put this line
Log.d("YourTag",packageName)
}
언급URL : https://stackoverflow.com/questions/6589797/how-to-get-package-name-from-anywhere
'programing' 카테고리의 다른 글
데이터 프레임의 구분 기호에서 열 분할 (0) | 2023.07.10 |
---|---|
data.frame 열을 벡터로 변환하시겠습니까? (0) | 2023.07.10 |
ASP.NET MVC 자동 캐싱 옵션을 비활성화하는 방법은 무엇입니까? (0) | 2023.07.05 |
사용자와 상관없이 Excel Workbook을 바탕 화면에 저장하는 방법은 무엇입니까? (0) | 2023.07.05 |
.dmp 파일을 Oracle로 가져오려면 어떻게 해야 합니까? (0) | 2023.07.05 |