アフィリエイト広告を利用しています
ファン
検索
<< 2023年12月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
最新記事
(12/20)KI cad インストールしてみよう
(04/11)【JAVA】チョロメを外部から動作させます。 幽霊が操作してるような
(07/29)spartan3 を cy7c68013 のバルクライトで シリアルコンフィグしてみた
(07/28)ブログ村に参加してみた。いまとのころブログ村からはだれもこない^^;
(07/28)PIC16F1503 を使ってみようかな?? MPLAB 内部クロック
(07/01)からっぽのつぎ のページ きっとはげ に なんか作用するかも
(05/06)GCEでワードプレス 第2 困ったのでやり直し手順
(05/05)https://certbot.eff.org/lets-encrypt/centosrhel7-apache をみてハマったこと
(04/28)フェドラ をつかって switchbot をアクセス する。  ? 未解決
(04/02)【オープンVPN】setsebool -P openvpn_enable_homedirs 1 でうごいた
(04/01)【QT5】わからないのでタイムアウトで自動でキャンセルボタン押すメッセージボックスつくってみた
(03/31)qt5よくわからんのだが メッセージボックスの OKスイッチをタイマーで押してみた。
(03/09)【boost】message queue 使い方 目も目も
(03/08)【バカの一つ覚え】ユニークID作成とそのちょっとした応用
(03/04)【パソコン】【GPIO】いったいこれは?
(02/26)【VHDL入門】ABZ信号から Hsync Vsyncを作り出してみよう その2
(02/26)【VHDL入門】ABZ信号から Hsync Vsyncを作り出してみよう その1
(02/26)【VHDL入門】速度比較 エンコーダーABZ相 ソースファイル付き
(02/25)【VHDL入門】ロータリーエンコーダABZ 出力のサンプル 200Mhz動作?
(02/23)【VHDL入門】UART 送受信繰り返しのテストベンチ作成してみたい
最新コメント
カテゴリーアーカイブ
プロフィール
有象無象さんの画像
有象無象
はげはじめました 禿増されます。励ましのコメントお待ちしてます。  
プロフィール

広告

posted by fanblog

2020年10月22日

libexpect c++ アンドロイドスタジオデバッグの接続#2

また 書きなぐりです。
 実は LINUXのスクリプト全然わかりません。
 QTを使っています ここではライブラリとしてQTをつかって 正規表現を間借りしています。
 ブーストなどつかってもほぼおなじでしょうけど QTなそのままつかえる利点があります。

今回のスクリプト? Cで書いたのですが これで 無線ランにつないでアンドロイドをデバッグするという話です。
 
 そこで C++で expect というライブラリーつかって 
乱暴に練り込みみたいなことしていますが 
 やってることは単純で
int fd=exp_spawnl(bin_sh_string ,bin_sh_string ,NULL);
 このスポーンは 意味的には 卵が孵化するみたいな いみっぽいです。
 地獄の使い なども スポーンなのでしょうけど ただ生まれるみたいな

ここで シェルを起動します。 fd に数字が入りますこの なんだかわからないディスクリプタを使います。
retv=exp_expectl(fd,exp_regexp,"\\$",120, exp_end);
 これも乱暴に 120なんてマジック番号いれています。 プロンプトみつけると120を返してきます。

次に アンドロイドの 接続のための adbを起動して 
adb    shell ip addr  
 なものを起動します。 これやると どひゃーみたいな のがでてきますので
 フィルターで 消して 
/opt/android-sdk/platform-tools/adb shell ip addr "|" grep inet "|" grep global
を C++から実行します。

この程度フィルターすると こんなのが帰ってきます。

inet 192.168.7.141/24 brd 192.168.7.255 scope global wlan0
inet 10.0.0.169/30 scope global tun0

 さらに
/opt/android-sdk/platform-tools/adb shell ip addr "|" grep inet "|" grep global "|" cut -f6 -d \" \"
程度フィルタすると


192.168.7.141/24
10.0.0.169/30

 アンドロイドにあれこれアドレスがついていますが 
 無線ランは 192からのアドレスでした。
 10からのは アンドロイドがVPNにつながってる関係です。
 153から始まるものも出てましたけどけしました。 これはおそらくグローバルIPです
 あと IPの6もでてましたけど これも 都合でけしました。
 
 まで まとまってきます。 さらに /24 とかこれを削ります。
/opt/android-sdk/platform-tools/adb shell ip addr "|" grep inet "|" grep global "|" cut -f6 -d \" \" "|" cut -d "/" -f 1
 これを C言語で書くときに \ とか ” をエスケープして書きますそうすると
使えます。

ライトで おそらく STDINに書き込むことになるのでしょう。
write(fd,cmd.c_str(),cmd.size());

そして 結果のプロンプトを検出して いきます。
今回は ローカルの 192から始まるものを使いたかったのでこれもマジック番号でとりだしました。
    QRegExp r("192\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
if(r.indexIn(list.at(i))>=0) { TargString=r.cap(0); }
 この部分かな

ちゃらとやりたかったので これでアンドロイドデバイスのアドレスをみつけます。
 これを 5555みたいなポートでつないで
 取り出したアドレスと :5555でつないで ちゃんちゃんと

なぜ無線ランにつなぎたかったかというと USBカメラをつなぎたかったので
 デバッグポートがつかえなくなります。だから無線ランです。

 お役にたつかしら ?????



#include <QApplication>
#include <expect.h>
#include <iostream>
#include <fstream>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <QDebug>
int main(int argc, char *argv[])
{
int fd;
int retv;
char bin_sh_string[] = "/bin/sh";
fd=exp_spawnl(bin_sh_string ,bin_sh_string ,NULL);
if(fd<0){return 0;}
retv=exp_expectl(fd,exp_regexp,"\\$",120, exp_end);
std::string cmd="/opt/android-sdk/platform-tools/adb shell ip addr \"|\" grep inet \"|\" grep global \"|\" cut -f6 -d \\\" \\\" \"|\" cut -d \"/\" -f 1 \n ";
write(fd,cmd.c_str(),cmd.size());
retv=exp_expectl(fd,exp_regexp,"\\$",120, exp_end);

QString temp = QString::fromLocal8Bit(exp_buffer);
QStringList list = temp.split(QRegExp("\n|\r\n|\r"));
QString TargString="";
for ( int i=0; i < list.size();i++ )
{
QRegExp r("192\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");

if(r.indexIn(list.at(i))>=0) { TargString=r.cap(0); }
}

cmd="/opt/android-sdk/platform-tools/adb tcpip 5555 \n ";
write(fd,cmd.c_str(),cmd.size());
retv=exp_expectl(fd,exp_regexp,"\\$",120, exp_end);
qDebug()<<"1"<<exp_buffer<<"retv="<<retv<<";";
cmd="/opt/android-sdk/platform-tools/adb connect "+TargString.toStdString()+":5555 \n";
write(fd,cmd.c_str(),cmd.size());
retv=exp_expectl(fd,exp_regexp,"\\$",120, exp_end);
qDebug()<<"2"<<exp_buffer<<"retv="<<retv<<";";

/*
return 0;
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
*/
}

【このカテゴリーの最新記事】
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/10288962
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
×

この広告は30日以上新しい記事の更新がないブログに表示されております。