3

ネイティブ部分と上位層で構成されるアプリケーションがあります。

したがって、いくつかのネイティブ関数を実行するには、root権限を付与する必要があります。

以前に投稿した記事として、Bluez Utils(hidd.c)から取得したコードを追加しました。

if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
    close(sk);
    return -1;
   }

コードはNDKによって.soになるようにビルドされています。

残念ながら、それは-1を返し続け、errnoは13であり、これは許可が拒否されたことを意味します。

一部の経験豊富な開発者(ここに感謝)は、このアプリケーションに十分な権限がないためにエラーが発生することについて言及しました。

それは「すべきではない」のようなものであるべきです

プロセスprocess=Runtime.getRuntime()。exec( "su");

これは、システム権限を持っているが、アプリケーションは持っていないことを意味すると思います。(私が間違っているかどうか教えてください)

ルート権限を持つためにアプリに付与する方法はありますか?

返信/手がかり/ヒントをいただければ幸いです。

よろしく-

サム

4

2 に答える 2

1

私はこれであなたを助けることができると思います。

ここでグー...

void gainRoot()
{
    Process chperm;
    try {
        chperm=Runtime.getRuntime().exec("su");
          DataOutputStream os = 
              new DataOutputStream(chperm.getOutputStream());
            os.writeBytes("chmod 777 /dev/video0\n");
            os.flush();

            os.writeBytes("exit\n");
            os.flush();

            chperm.waitFor();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

これは、ルートファイルのアクセス許可を変更するために通常使用する関数です。

suを実行すると、root権限で新しいプロセスが作成されます。したがって、このプロセスを使用すると、任意のルート操作を実行できます。従う必要のある特定の構文がいくつかあります。これは上の例に示されています。

したがって、実行できることの1つは、コードのバインド部分を個別の実行可能ファイルとしてビルドし、それをsystem / bin内、または通常は実行可能ファイルが保持される場所に配置することです。実行可能ファイルの名前がbind123であるとします。

            os.writeBytes("chmod 777 /dev/video0\n");
            os.flush();

に置き換えます

            os.writeBytes("bind123\n");
            os.flush();

上記のコードで。

これは機能するはずです。おそらくこれが機能したら、実行可能ファイルに依存せずにアプリケーションと統合してみることができます。私はあなたを混乱させないことを望みます。明確さが必要な場合は、私に知らせてください。

于 2012-04-18T09:16:28.523 に答える
0

ポート>=1024にバインドするためにrootは必要ありません。ApplicationManifest.xmlファイルで必要なのはインターネット権限のみです。

于 2012-04-18T06:39:03.193 に答える