安卓工作记录

[Android] 调用第三方app(未知包名情况)

2019-03-04  本文已影响0人  闭门造折

毕设需要实现一个app,暂且称为MyApp
其中有一个功能是调用另一个相机配套app(称为CameraApp好了)进行拍照

在网上查找了如何在一个app中调用另一个app
参考资料:《Android APP打开另一个APP完整逻辑实现》
这篇文章很详细的说明了如何调用。

但是第三方app存在两个问题
1:如果该app很有名,如高德地图等,网上就可以找到他们的包名、scheme等信息调用即可。但是如果该app很冷门,如我们使用的相机配套app,得不到包名,最简单的通过包名调用的方法就暂时失败了。
2:有的方法中说可以实现隐式调用,但是第三方软件我们无法直接对原app进行修改

最终决定从问题1入手,通过反编译的方式,获取apk的包名(这个过程意外的简单)

参考资料:《Android APK反编译 apktool使用教程》
按照里面的步骤,首先下载一个jar文件和一个bat文件,然后放在C://windows下

通过cmd打开到apk所在位置,运行指令

apktool d apk的名字.apk

我们就会得到很多的文件,打开AndroidMenifest.xml,看到如下内容(截取有效内容)

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.wifidevice.coantec.activity">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    
    <application android:allowBackup="true" android:icon="@drawable/yaya" android:label="@string/app_name" android:theme="@style/AppTheme">
        <activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:name="com.methnm.coantec.activity.MainActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name="com.methnm.coantec.activity.Home" android:screenOrientation="landscape" android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"/>
        <activity android:name="com.methnm.coantec.activity.FileActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"/>
        <activity android:name="com.methnm.coantec.activity.PhotoGridviewActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"/>

很清晰地看到,package的名字为"com.wifidevice.coantec.activity"
主类的名字为“com.methnm.coantec.activity.MainActivity”

重新找到上面进行包名app调用的教程,照葫芦画瓢进行调用(我的app中是给调用操作绑定了一个按钮)

// 调用拍照按钮
Button cameraButton = (Button) findViewById(R.id.camera_button);
cameraButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Log.d(TestLog, "Took photo");
        Intent intent = new Intent();
        //包名 包名+类名(全路径)
        ComponentName comp = new ComponentName("com.wifidevice.coantec.activity","com.methnm.coantec.activity.MainActivity");
        intent.setComponent(comp);
        intent.setAction("android.intent.action.MAIN");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
});

运行测试一下,成功!
中途其实还是失败了一小下的,我原以为主类的前半段com.methnm.coantec.activity就是包名,所以Android一直提示找不到对应的app,改进后就直接通过了

上一篇下一篇

猜你喜欢

热点阅读