
桌面预置widget的方法 在Launcher的配置文件 res/xml/default_workspacexml中添加如下的代码:<appwidgetlauncher:packageName="comgoogleandroidappsgeniegeniewidget"//预置应用的包名launcher:className="comgoogleandroidappsgeniegeniewidgetminiwidgetMiniWidgetProvider"//预置应用的Provider的类名,不是Activity的类名launcher:screen="1"//在第几屏0为第一屏,launcher:x="0"//x坐标launcher:y="0"//y坐标launcher:spanX="4"//x方向占几个单元格launcher:spanY="1"///y方向占几个单元格通过logcat有时可以找到应用的包名和Provider类名,此方法不可取,容易出错。系统的widget可以通过查找相关的源码找到对应的包名和Provider的类名,但是第三方应用看不到源码,但是也可以通过反编译第三方应用,获得相应的Maifestxml文件,找到对应的包名和Provider类名,但是此方法比较繁琐。可以通过在Launcher中添加如下代码,可以将系统中所安装的所有 的widget的信息打印出来:在Launcherjava中的onCreate方法中添加下面的代码:List<AppWidgetProviderInfoproviders=mAppWidgetManagergetInstalledProviders();finalintproviderCount=providerssize();for(inti=0;i<providerCount;i++){ComponentNameprovider=providersget(i)provider;Logi("xxx","packagename:"+providergetPackageName()+"classname:"+providergetClassName());}新编译Launcher,把Launcher push进去之后,执行 adb logcat -s xxx,就可以看到打印出来的Log信息,包名和Provider了类名。
获取手机型号并发送到邮箱先集合信息后发送邮件。
1、获取手机型号。
2、获取手机SDK版本号。
3、获取系统版本号。
4、获取手机品牌。
5、获取ROM固件名字。
6、获取当前系统语言。
7、获取手机IMEI,需要在AndroidManifestxml中添加权限。
8、获取应用包名。
9、获取应用versionName和versionCode。
10、获取手机屏幕宽高、方向,刷新率。
11、集合信息压缩成文件夹,发送到邮箱。
方法一:使用aapt //aapt是sdk自带的一个工具,在sdk\builds-tools\目录下
1以ES文件浏览器为例,命令行中切换到aaptexe目录执行:aapt dump badging E:\apk\es3apk
2运行后的结果中以下两行分别是应用包名package和入口activity名称
package: name=’comestrongsandroidpop’
launchable-activity: name=’comestrongsandroidpopviewFileExplorerActivity’
注:在android sdk目录搜索可以找到aaptexe,如果没有可以下载apktool。
方法二:查看AndroidManifestxml
1使用apktool反编译app:apktoolbat d es3apk E:\apk\es
2打开AndroidManifestxml
manifest节点的package属性值是应用的包名:
查找androidintentactionMAIN和androidintentcategoryLAUNCHER对应的activity,该activity对应的android:name属性既是入口activity名称,如下:
ThemeNoTitleBar” android:label=”@string/app_name” android:name=”comestrongsandroidpopviewFileExplorerActivity”>
androidintentactionMAIN决定应用程序最先启动的Activity
androidintentcategoryLAUNCHER决定应用程序是否显示在程序列表里
Logd(TAG," thisgetFilesDir()getParent()"+thisgetFilesDir()getParent());
thisgetFilesDir()getParent()/data/user/0/comxxxxxx
comxxxxxx为该应用的包名
以后就不用另行去判断是真机还是模拟器的安装之后文件的路径了
该方法直接返回安装之后包所在的路径
手机无法直接查看应用安装之后 应用宝所在的具体路径的 可以root之后 或者开发工具Android Studio点击Device File Explorer等方法查看
原理:
通过查看AndroidManifestxml
方法:
可以通过如下方法获得:
1aapt
aapt dump xmltree apk路径 AndroidManifestxml > 输入的路径
2apktool 反编译
apktool d -f apk路径 输出的路径
3monkey---Android自带的工具
adb shell monkey --port 1080 -v -v
aapt即 Android Asset Packaging Tool
该工具在SDK/tools目录下,如果你没有设置环境变量,那需要进入该目录下才能运行aapt命令,如果设置了环境变量则可以在任何目录下运行aapt命令了。
1、列出压缩文件目录
aapt l[ist] [-v] [-a] file{zip,jar,apk}
参数:
-v:会以table的形式输出目录,table的表目有:Length、Method、Size、Ratio、Date、Time、CRC-32、Name。其中Method表示压缩形式,有Deflate和Stored两种,即该Zip目录采用的算法是压缩模式还是存储模式;Ratio表示压缩率。
-a:会详细输出所有目录的内容。
2、查看APK的相关信息
aapt d[ump] [--values] WHAT file{apk} [asset [asset ]]
badging Print the label and icon for the app declared in APK
permissions Print the permissions from the APK
resources Print the resource table from the APK
configurations Print the configurations in the APK
xmltree Print the compiled xmls in the given assets
xmlstrings Print the strings of the given compiled xml assets
1)、查看APK包的packageName、versionCode、applicationLabel、launcherActivity、permission等各种详细信息
aapt dump badging < fileapk>
2)、查看权限
aapt dump permissions <fileapk>
3)、查看资源列表
aapt dump resources <fileapk>
把查看信息保存到文件中去可以使用:
aapt dump resources <file_pathapk> > sodinotxt
4)、查看APK配置信息
aapt dump configurations <file_pathapk>
5)、查看指定APK的指定XML文件
aapt dump xmltree <file_pathapk> res/xml
以树形结构输出的xml信息。
aapt dump xmlstrings <file_pathapk> res/xml
输出xml文件中所有的字符串信息。
3、编译android资源
aapt p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifestxml] \
[-0 extension [-0 extension ]] [-g tolerance] [-j jarfile] \
[--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL] \
[--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] \
[--rename-manifest-package PACKAGE] \
[--rename-instrumentation-target-package PACKAGE] \
[--utf16] [--auto-add-overlay] \
[--max-res-version VAL] \
[-I base-package [-I base-package ]] \
[-A asset-source-dir] [-G class-list-file] [-P public-definitions-file
\
[-S resource-sources [-S resource-sources ]] \
[-F apk-file] [-J R-file-dir] \
[--product product1,product2,] \
[-c CONFIGS] [--preferred-configurations CONFIGS] \
[-o] \
[raw-files-dir [raw-files-dir] ]
Package the android resources It will read assets and resources that are
supplied with the -M -A -S or raw-files-dir arguments The -J -P -F and -R
options control which files are output
部分参数解释:
-f:如果编译出来的文件已经存在,强制覆盖;
-m:使生成的包的目录放在-J参数指定的目录;
-J:指定生成的RJava的输出目录;
-S:res文件夹路径;
-A:assert文件夹的路径;
-M:AndroidManifestxml的路径;
-l:某个版本平台的androidjar的路径;
-F:具体指定APK文件的输出
1)、将工程的资源编译出Rjava文件
aapt package –m –J <Rjava目录> -S <res目录> -l <androidjar目录> -M
<AndroidManifestxml目录>
2)、将工程的资源编译到一个包里
aapt package –f –S <res目录> -l <androidjar目录> -A <assert目录> -M
<AndroidManifestxml目录> -F <输出的包目录>
4、打包好的APK中移除文件
aapt r[emove] [-v] file{zip,jar,apk} file1 [file2 ]
5、添加文件到打包好的APK中
aapt a[dd] [-v] file{zip,jar,apk} file1 [file2 ]
6、显示aapt的版本
aapt v[ersion]
用intentfilter获取安装的apk
包名,在BroadcastReceiver里面就可以拿到安装的包名和APP,等基本信息,再利用packageManager的功能就可能放到listView里面
先通过下面的getPackages()方法获得所有系统安装的应用,根据打印出来的日志找到你要找的应用的对应的包名,在调用startAppByPackageName()方法启动应用就可以了,主activity不需要的
private ArrayList<PInfo> getPackages() {
ArrayList<PInfo> apps = getInstalledApps();
final int max = appssize();
for (int i=0; i<max; i++) {
appsget(i)prettyPrint();
}
return apps;
}
class PInfo {
private String appname = "";
private String pname = "";
private String versionName = "";
private int versionCode = 0;
private Drawable icon;
private void prettyPrint() {
Loge("zhm",appname + "\t" + pname + "\t" + versionName + "\t" + versionCode);
}
}
private ArrayList<PInfo> getInstalledApps() {
ArrayList<PInfo> res = new ArrayList<PInfo>();
List<PackageInfo> packs = parentgetPackageManager()getInstalledPackages(0);
for(int i=0;i<packssize();i++) {
PackageInfo p = packsget(i);
if (pversionName == null) {
continue ;
}
PInfo newInfo = new PInfo();
newInfoappname = papplicationInfoloadLabel(parentgetPackageManager())toString();
newInfopname = ppackageName;
newInfoversionName = pversionName;
newInfoversionCode = pversionCode;
newInfoicon = papplicationInfoloadIcon(parentgetPackageManager());
resadd(newInfo);
}
return res;
}
public void startAppByPackageName(String packageName){
PackageInfo pi = null;
try {
pi = getPackageManager()getPackageInfo(packageName, 0);
} catch (NameNotFoundException e) {
eprintStackTrace();
}
Intent resolveIntent = new Intent(IntentACTION_MAIN, null);
resolveIntentaddCategory(IntentCATEGORY_LAUNCHER);
resolveIntentsetPackage(pipackageName);
List<ResolveInfo> apps = getPackageManager()queryIntentActivities(resolveIntent, 0);
ResolveInfo ri = appsiterator()next();
if (ri != null ) {
String packageName1 = riactivityInfopackageName;
String className = riactivityInfoname;
Intent intent = new Intent(IntentACTION_MAIN);
intentaddCategory(IntentCATEGORY_LAUNCHER);
intentaddFlags(IntentFLAG_ACTIVITY_NEW_TASK);
ComponentName cn = new ComponentName(packageName1, className);
intentsetComponent(cn);
startActivity(intent);
}
}
以上就是关于Android开发如何获得第三方应用Widget的包名和类名全部的内容,包括:Android开发如何获得第三方应用Widget的包名和类名、获取手机型号并发送到邮箱怎么弄、如何根据包名packageName获取程序启动的主Activity名称等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)