如何根据包名packageName获取程序启动的主Activity名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据包名packageName获取程序启动的主Activity名称相关的知识,希望对你有一定的参考价值。

方法一:使用aapt //aapt是sdk自带的一个工具,在sdk\builds-tools\目录下
1.以ES文件浏览器为例,命令行中切换到aapt.exe目录执行:aapt dump badging E:\apk\es3.apk
2.运行后的结果中以下两行分别是应用包名package和入口activity名称
package: name=’com.estrongs.android.pop’
launchable-activity: name=’com.estrongs.android.pop.view.FileExplorerActivity’
注:在android sdk目录搜索可以找到aapt.exe,如果没有可以下载apktool。

方法二:查看AndroidManifest.xml
1.使用apktool反编译app:apktool.bat d es3.apk E:\apk\es
2.打开AndroidManifest.xml
manifest节点的package属性值是应用的包名:
查找android.intent.action.MAIN和android.intent.category.LAUNCHER对应的activity,该activity对应的android:name属性既是入口activity名称,如下:
Theme.NoTitleBar” android:label=”@string/app_name” android:name=”com.estrongs.android.pop.view.FileExplorerActivity”>

android.intent.action.MAIN决定应用程序最先启动的Activity
android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里
参考技术A private void getActivities(Activity activity,String packageName)

Intent localIntent = new Intent("android.intent.action.MAIN", null);
localIntent.addCategory("android.intent.category.LAUNCHER");
List<ResolveInfo> appList = activity.getPackageManager().queryIntentActivities(localIntent, 0);
for (int i = 0; i < appList.size(); i++)
ResolveInfo resolveInfo = appList.get(i);
String packageStr = resolveInfo.activityInfo.packageName;
if (packageStr.equals(packageName))
//这个就是你想要的那个Activity
android.util.Log.e("", "" + resolveInfo.activityInfo.name);
break;


百度地图集成

登录百度地图开放平台

技术分享

同意LBS协议

技术分享

然后创建应用

技术分享

Android应用获取包名packagename,根据开发工具不同,获取位置有所不同,这里只讲解eclipse

使用 eclipse 开发

包名是Android应用程序本身在AndroidManifest.xml 中定义的名称,例如:

技术分享

 

Android签名证书的sha1值获取方式:

使用keytool

1步:运行进入控制台

技术分享

 

然后

技术分享

2步:定位到.android文件夹下,输入cd .android

 

技术分享

 

3步:输入keytool -list -v -keystore debug.keystore,会得到三种指纹证书,选取SHA1类型的证书(密钥口令是android),例如:

其中keytool为jdk自带工具;keystorefile为Android 签名证书文件

技术分享

 

 

技术分享

这里就是key了

 

技术分享

获取了key开始使用,需要添加百度地图jar包

技术分享

解压后如下:

BaiduMap_AndroidSDK_v3.7.3_Docs是文档

BaiduMap_AndroidSDK_v3.7.3_Sample是实例

libs:jar包

技术分享

将所有jar文件都添加到工程里面

技术分享

注意:应用混淆

集成地图SDK的应用,在打包混淆的时候,需要注意与地图SDK相关的方法不可被混淆。混淆方法如下:

-keep class com.baidu.** {*;}

-keep class vi.com.** {*;}   

-dontwarn com.baidu.**

保证百度类不能被混淆,否则会出现网络不可用等运行时异常

 

显示百度地图

百度地图SDK为开发者提供了便捷的显示百度地图数据的接口,通过以下几步操作,即可在您的应用中使用百度地图数据:

第一步:创建并配置工程(具体方法参见工程配置部分的介绍);

第二步:在AndroidManifest中添加开发密钥、所需权限等信息;

(1)在application中添加开发密钥

<application>  
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="开发者 key" />  
</application>

如图

技术分享

2)添加所需权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

如图

技术分享

第三步,在布局xml文件中添加地图控件;

<com.baidu.mapapi.map.MapView  
    android:id="@+id/bmapView"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:clickable="true" />
 

如图

 

技术分享

第四步,在应用程序创建时初始化 SDK引用的Context 全局变量:

public class MainActivity extends Activity {  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
    }  
}

注意:在SDK各功能组件使用之前都需要调用

SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中

注意:如果是在Application里面需要在清单文件中配置Application,不然会报这个错误Caused by: android.view.InflateException: Binary XML file line ,Error inflating class com.baidu.mapapi.map.MapView无法初始化百度地图

 

如图:

技术分享

第五步,创建地图Activity,管理地图生命周期;

public class MainActivity extends Activity {  
    MapView mMapView = null
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
        //获取地图控件引用  
        mMapView = (MapView) findViewById(R.id.bmapView);  
    }  
    @Override  
    protected void onDestroy() {  
        super.onDestroy();  
        //activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
        mMapView.onDestroy();  
    }  
    @Override  
    protected void onResume() {  
        super.onResume();  
        //activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
        mMapView.onResume();  
        }  
    @Override  
    protected void onPause() {  
        super.onPause();  
        //activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
        mMapView.onPause();  
        }  
    }

如图

技术分享

完成以上步骤后,运行程序,即可在您的应用中显示如下地图:

技术分享

总结:

第一, 先使用应用“包名”和“sha1”获取到百度地图的唯一key

第二, 下载百度的SDK,添加到应用中

第三, 配置百度SDK的权限,在Layout中配置MapView,在Application里面配置SDKInitializer.initialize(getApplicationContext());

同时在Activity重写onResumeonPauseonDestroy进行实现地图生命周期管理  注:加入mMapView. onResume ();mMapView.onPause();mMapView. onDestroy ();

以上是关于如何根据包名packageName获取程序启动的主Activity名称的主要内容,如果未能解决你的问题,请参考以下文章

快速获取App的packageName、Activity小结

Android测试随笔获得App的包名和启动Activity

android判断某服务是不是正在运行

RuntimeException:无法启动接收器“包名”:NullPointerException

AndroidGetAPKInfo --- 检查包名(packageName)版本(versionNameversionCode)应用签名(Signature)等信息

如何将.db文件从资产放到数据/数据/包名/ android [重复]