天天看点

手机助手(一)

引入adb工程

注:这部分可以参考Windows下adb编译详解

接上篇,引用上篇中的工程,导入adb-source.zip中的文件并对整个工程文件目录做了小调整,主要是将代码文件分类存放。在工程中添加现有项目,将adb源码中的cpp文件添加到工程中(仅添加cpp后缀的文件,.c文件这里用不到可以直接删除)

1.创建Source目录(ProMonkey\AdbDll\Source)

2.创建Source\include目录(ProMonkey\AdbDll\Source\include)

3.创建Source\adb目录(ProMonkey\AdbDll\Source\adb)

4.将adb-source\lib文件夹拷贝到ProMonkey\AdbDll\Source\adb

5.adb-source\include文件夹拷贝到ProMonkey\AdbDll\Source\adb

6.将adb_interface.cpp、adb_interface.def和dllmain.cpp移动到Source目录

7.添加现有项到工程(源文件添加了一个adb过滤器,adb的代码放在里面)

手机助手(一)

配置工程项目属性

配置属性>常规>字符集 选择使用多字节字符集

手机助手(一)

配置属性>调试>命令 选择C#生成的exe文件(这里是为了调试方便,点击调试时自动启动exe,exe加载的dll会优先使用本工程的(同名情况下)),可以直接在dll代码文件中直接添加断点来调试

手机助手(一)

配置属性>VC++目录>包含目录 添加创建的两个include的目录

手机助手(一)

配置属性>C/C++>预处理器 添加ADB_HOST;HAVE_WIN32_IPC;HAVE_WIN32_PROC;HAVE_WINSOCK;

手机助手(一)

配置属性>链接器>常规>附加库目录 添加lib所在的目录(Source\adb\lib)

手机助手(一)

配置属性>链接器>输入 附加依赖项添加lib文件(ws2_32.lib;zdll.lib;libeay32.lib;ssleay32.lib;AdbWinApi.lib;),模块定义文件指向def移动后的位置(开头整理文件时移动了这个文件)

手机助手(一)

重新生成解决方案>调试

手机助手(一)

what the fuck!

独立编译都正常,不加adb的代码也正常,也没调用adb的函数,仅仅是添加adb文件进行编译罢了,就不行了。既然dll都加载不了就没法用C#看了,创建一个win32控制台应用程序,加载dll看看,代码如下:

#include <windows.h>
#include <stdio.h>
#include <process.h>

int main(int argc, char* argv[])
{
    HMODULE hdll=LoadLibrary(L"E:\\workspace\\Visual Studio\\ProMonkey\\Debug\\AdbDll.dll");  //加载dll
    if(hdll!=NULL)
    {
        FARPROC proc=GetProcAddress(hdll,"helloWorld");
        proc();
    }

    system("pause");
    return ;
}
           

提示一下子就人性化了

手机助手(一)

立刻百度下载一个zlib1.dll到生成目录,再次点运行

手机助手(一)

重新运行adb,调用成功了。

手机助手(一)

至此基础的环境已经搭建完成了,接下来就是封装adb函数到C#和画界面了。

后记:今天试了一下,adb的源码是1.0.31的,很难刷出设备,项目无期限搁置,等待弄一个高版本的adb源码再继续