Androidアプリ をDebug実行では外部からTCP接続できますが、Run実行だとブロックされますが、対処方法を教えてください
Q&A
Closed
解決したいこと
Android 13のスマホでnativeコードを使ったアプリを開発しています。
アプリでは、同じWiFiに接続したデバイスからのTCP接続を受け付け、受信したデータに合わせて処理を行う機能を、native "c"コードで作成しています。
USBケーブルでスマホに接続し、Android Studioでビルドしたものをスマホで実行させたとき、Debug実行(Debug 'App')を行うと、TCP待受けポートに接続してきたデバイスをaccept()で検出し、データを受信できます。
しかし、Run実行(Run 'App')を行うと、TCP待受けポートに接続してきたデバイスをaccept()で検出はできません。接続を行うデバイスでは、connect()がすぐに終了し、接続先に接続を明示的に拒否されたようなエラーになります。
Run実行でも、TCP接続を受け入れることができるようにしたいです。
発生している問題・エラー
Androidアプリ側では、エラーはありません。
接続側のエラーから考えると、Android側のFireWallなどでガードされているのではないかとも推測しています。
該当するソースコード
申し訳ありませんが、全コードは提示できません。
「自分で試したこと」にコードの一部を掲載させていただきます。
自分で試したこと
Androidアプリ側で確認したことは以下のとおりです。
AndroidManifest.xmlへのパーミッション設定
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
MainActivity.javaでの実行時パーミッション確認
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED) {
パーミッションがないというエラーは出ませんので、パーミッションには問題ないです。
networl_security_config.xmlを構成
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">tanakafeworks.com</domain>
</domain-config>
</network-security-config>
proguard-rules.proを設定
class名にはドメインなどの固有情報があるため、[MyPackageInfo]として、"com.{my-site-name}.{product-name}"で展開しています。
# Keep network-related classes
-keep class [MyPackageInfo].network.** { *; }
# Keep the main activity
-keep class [MyPackageInfo].MainActivity {
*;
}
# Keep any classes that are used in native method signatures
-keepclassmembers class * {
native <methods>;
}
# Keep classes used for JNI (Java Native Interface)
-keep class [MyPackageInfo].** { *; }
# Keep classes for logging
-keep class android.util.Log {
public static int d(...);
public static int e(...);
public static int i(...);
public static int v(...);
public static int w(...);
}
# Keep networking classes
-keep class java.net.** { *; }
-keep class javax.net.** { *; }
# Prevent obfuscation of methods used for reflection
-keepclassmembers class * {
void set*(***);
*** get*();
}
# Keep your custom application classes
-keep class [MyPackageInfo].** {
*;
}
開発環境
Windows11 Pro
Android Studio Iguana | 2023.2.1
Runtime version: 17.0.9+0--11185874 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
スマホ
Android 13
Memory 8GB
UMIDIGI G5 Mecha
Androidアプリ開発には不慣れなところもあり、当たり前ができていないこともありますが、ご教授をお願いします。