diff --git a/pm3rdv4rrg/.gitignore b/pm3rdv4rrg/.gitignore
new file mode 100644
index 00000000..3889eda0
--- /dev/null
+++ b/pm3rdv4rrg/.gitignore
@@ -0,0 +1,62 @@
+# Built application files
+*.apk
+*.ap_
+
+# Files for the ART/Dalvik VM
+*.dex
+
+# Java class files
+*.class
+
+# Generated files
+bin/
+gen/
+out/
+
+# Cmake gen
+.cxx/
+
+# Gradle files
+.gradle/
+build/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Proguard folder generated by Eclipse
+proguard/
+
+# Log Files
+*.log
+
+# Android Studio Navigation editor temp files
+.navigation/
+
+# Android Studio captures folder
+captures/
+
+# IntelliJ
+*.iml
+.idea/
+
+# Keystore files
+# Uncomment the following line if you do not want to check your keystore files in.
+#*.jks
+
+# External native build folder generated in Android Studio 2.2 and later
+.externalNativeBuild
+
+# Google Services (e.g. APIs or Firebase)
+google-services.json
+
+# Freeline
+freeline.py
+freeline/
+freeline_project_description.json
+
+# fastlane
+fastlane/report.xml
+fastlane/Preview.html
+fastlane/screenshots
+fastlane/test_output
+fastlane/readme.md
diff --git a/pm3rdv4rrg/build.gradle b/pm3rdv4rrg/build.gradle
new file mode 100644
index 00000000..5f310132
--- /dev/null
+++ b/pm3rdv4rrg/build.gradle
@@ -0,0 +1,51 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion 29
+ buildToolsVersion "29.0.2"
+
+ defaultConfig {
+ minSdkVersion 19
+ targetSdkVersion 29
+ versionCode 1
+ versionName "1.0"
+
+ externalNativeBuild {
+ cmake {
+ arguments '-DANDROID_STL=c++_static'
+ abiFilters "x86", "x86_64", "armeabi-v7a", "arm64-v8a"
+ }
+ }
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles 'consumer-rules.pro'
+ }
+
+ externalNativeBuild {
+ cmake {
+ version '3.10.2'
+ path 'src/main/cpp/CMakeLists.txt'
+ }
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'com.github.xianglin1998:nfctag:1.0'
+ implementation 'com.github.xianglin1998:nfc_console:1.0'
+
+ implementation 'com.github.xianglin1998:ComBridge:1.0.7'
+ // implementation project(path: ':iobridges')
+
+ implementation project(':communication')
+ implementation project(path: ':utils')
+
+ implementation 'androidx.appcompat:appcompat:1.1.0'
+}
\ No newline at end of file
diff --git a/pm3rdv4rrg/consumer-rules.pro b/pm3rdv4rrg/consumer-rules.pro
new file mode 100644
index 00000000..e69de29b
diff --git a/pm3rdv4rrg/proguard-rules.pro b/pm3rdv4rrg/proguard-rules.pro
new file mode 100644
index 00000000..f1b42451
--- /dev/null
+++ b/pm3rdv4rrg/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/pm3rdv4rrg/src/main/AndroidManifest.xml b/pm3rdv4rrg/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..babbbc7e
--- /dev/null
+++ b/pm3rdv4rrg/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
diff --git a/pm3rdv4rrg/src/main/java/cn/rrg/devices/Proxmark3RRGRdv4.java b/pm3rdv4rrg/src/main/java/cn/rrg/devices/Proxmark3RRGRdv4.java
new file mode 100644
index 00000000..bc576056
--- /dev/null
+++ b/pm3rdv4rrg/src/main/java/cn/rrg/devices/Proxmark3RRGRdv4.java
@@ -0,0 +1,31 @@
+package cn.rrg.devices;
+
+import com.iobridges.com.Communication;
+import com.iobridges.com.DeviceChecker;
+
+import java.io.IOException;
+
+public class Proxmark3RRGRdv4 extends DeviceChecker {
+
+ static {
+ System.loadLibrary("pm3rrg_rdv4");
+ }
+
+ public Proxmark3RRGRdv4(Communication communication) {
+ super(communication);
+ }
+
+ @Override
+ public boolean checkDevice() throws IOException {
+ return testPm3();
+ }
+
+ @Override
+ public void close() throws IOException {
+ closePm3();
+ }
+
+ private native boolean testPm3() throws IOException;
+
+ private native void closePm3();
+}
diff --git a/pm3rdv4rrg/src/main/java/cn/rrg/natives/Proxmark3RRGRdv4Tools.java b/pm3rdv4rrg/src/main/java/cn/rrg/natives/Proxmark3RRGRdv4Tools.java
new file mode 100644
index 00000000..0f866e4f
--- /dev/null
+++ b/pm3rdv4rrg/src/main/java/cn/rrg/natives/Proxmark3RRGRdv4Tools.java
@@ -0,0 +1,20 @@
+package cn.rrg.natives;
+
+import cn.rrg.console.define.ICommandTools;
+
+public class Proxmark3RRGRdv4Tools implements ICommandTools {
+
+ //加载so文件!
+ static {
+ System.loadLibrary("pm3rrg_rdv4");
+ }
+
+ @Override
+ public native int startExecute(String cmd);
+
+ @Override
+ public native boolean isExecuting();
+
+ @Override
+ public native void stopExecute();
+}
diff --git a/pm3rdv4rrg/src/main/res/values/strings.xml b/pm3rdv4rrg/src/main/res/values/strings.xml
new file mode 100644
index 00000000..0b86ae82
--- /dev/null
+++ b/pm3rdv4rrg/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ pm3rdv4rrg
+