├── app ├── .gitignore ├── libs │ └── app-release.aar ├── src │ ├── main │ │ ├── assets │ │ │ ├── xposed_init │ │ │ ├── readme.html │ │ │ └── readme_en.html │ │ ├── res │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── logo.png │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_add_white.png │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_close_black.png │ │ │ │ └── ic_close_grey.png │ │ │ ├── values │ │ │ │ ├── dimens.xml │ │ │ │ ├── colors.xml │ │ │ │ ├── styles.xml │ │ │ │ └── strings.xml │ │ │ ├── drawable │ │ │ │ └── bg_add.xml │ │ │ ├── values-w820dp │ │ │ │ └── dimens.xml │ │ │ ├── values-v21 │ │ │ │ └── styles.xml │ │ │ ├── layout │ │ │ │ ├── dialog_loading.xml │ │ │ │ ├── activity_read_me.xml │ │ │ │ ├── dialog_import_json.xml │ │ │ │ ├── step_three.xml │ │ │ │ ├── activity_edit_rule.xml │ │ │ │ ├── dialog_export_json.xml │ │ │ │ ├── add_white.xml │ │ │ │ ├── item_white_rule.xml │ │ │ │ ├── activity_setting.xml │ │ │ │ ├── step_one.xml │ │ │ │ ├── item_choose_app.xml │ │ │ │ ├── activity_about.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── item_app.xml │ │ │ │ └── step_two.xml │ │ │ ├── menu │ │ │ │ └── menu_main.xml │ │ │ └── values-zh │ │ │ │ └── strings.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── xloger │ │ │ │ └── exlink │ │ │ │ └── app │ │ │ │ ├── util │ │ │ │ ├── Tool.java │ │ │ │ ├── KotlinEx.kt │ │ │ │ ├── KotlinTool.kt │ │ │ │ ├── RuleDatabaseOpenHelper.kt │ │ │ │ ├── ViewTool.java │ │ │ │ ├── FileHelper.kt │ │ │ │ ├── JSONFile.kt │ │ │ │ ├── ExConfig.kt │ │ │ │ ├── MyLog.java │ │ │ │ ├── AndroidAppUtil.java │ │ │ │ ├── FileUtil.java │ │ │ │ ├── StreamUtil.java │ │ │ │ └── AppUtil.kt │ │ │ │ ├── BaseApplication.java │ │ │ │ ├── entity │ │ │ │ ├── App.kt │ │ │ │ ├── Rule.kt │ │ │ │ └── AndroidApp.java │ │ │ │ ├── Constant.java │ │ │ │ ├── activity │ │ │ │ ├── BaseActivity.java │ │ │ │ ├── XposedIntoActivity.java │ │ │ │ ├── AboutActivity.java │ │ │ │ ├── StepThreeActivity.java │ │ │ │ ├── ReadMeActivity.java │ │ │ │ ├── EditRuleActivity.java │ │ │ │ ├── SettingActivity.java │ │ │ │ ├── StepTwoActivity.java │ │ │ │ └── MainActivity.kt │ │ │ │ ├── view │ │ │ │ ├── Loading.java │ │ │ │ ├── ImportJsonDialog.kt │ │ │ │ ├── ExportJsonDialog.kt │ │ │ │ ├── AddWhiteDialog.java │ │ │ │ └── StepOneDialog.kt │ │ │ │ ├── HookSelf.kt │ │ │ │ ├── RuleContentProvider.kt │ │ │ │ ├── adapter │ │ │ │ ├── ChooseAppAdapter.java │ │ │ │ ├── WhiteRuleAdapter.java │ │ │ │ ├── ExportAdapter.kt │ │ │ │ └── AppAdapter.java │ │ │ │ └── HookMain.kt │ │ └── AndroidManifest.xml │ └── androidTest │ │ └── java │ │ └── com │ │ └── xloger │ │ └── exlink │ │ └── app │ │ ├── ApplicationTest.java │ │ └── util │ │ └── StreamUtilTest.java ├── deps │ └── XposedBridgeApi-20150213.jar ├── proguard-rules.pro ├── build.gradle └── app.iml ├── settings.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .idea ├── caches │ └── build_file_checksums.ser ├── encodings.xml ├── dictionaries │ └── xloger.xml ├── vcs.xml ├── modules.xml ├── runConfigurations.xml ├── gradle.xml ├── markdown-navigator.xml ├── misc.xml ├── codeStyles │ └── Project.xml └── markdown-navigator-enh.xml ├── .gitignore ├── toDoList.md ├── README.md ├── ExLink.iml ├── gradlew.bat └── gradlew /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /app/libs/app-release.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xloger/ExLink/HEAD/app/libs/app-release.aar -------------------------------------------------------------------------------- /app/src/main/assets/xposed_init: -------------------------------------------------------------------------------- 1 | com.xloger.exlink.app.HookMain 2 | com.xloger.exlink.app.HookSelf -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xloger/ExLink/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /.idea/caches/build_file_checksums.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xloger/ExLink/HEAD/.idea/caches/build_file_checksums.ser -------------------------------------------------------------------------------- /app/deps/XposedBridgeApi-20150213.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xloger/ExLink/HEAD/app/deps/XposedBridgeApi-20150213.jar -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xloger/ExLink/HEAD/app/src/main/res/mipmap-xhdpi/logo.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xloger/ExLink/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xloger/ExLink/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xloger/ExLink/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_add_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xloger/ExLink/HEAD/app/src/main/res/mipmap-xxhdpi/ic_add_white.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xloger/ExLink/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_close_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xloger/ExLink/HEAD/app/src/main/res/mipmap-xxhdpi/ic_close_black.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_close_grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xloger/ExLink/HEAD/app/src/main/res/mipmap-xxhdpi/ic_close_grey.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | /local.properties 3 | /.idea/workspace.xml 4 | /.idea/libraries 5 | .DS_Store 6 | /build 7 | gradle.properties 8 | /gradle.properties 9 | /.idea -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/dictionaries/xloger.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | xposed 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /toDoList.md: -------------------------------------------------------------------------------- 1 | ## 还剩下的工作: 2 | - 导入导出规则/某条 3 | - 自定义Url保存链接 4 | - hook部分获取url部分需要重构 5 | - 匹配模式里代码的重构 6 | - 微信群邀请链接 7 | 8 | 9 | ### 待兼容列表: 10 | - QQ空间App 11 | - 贴吧 12 | - 微信 13 | - 即刻 14 | - 一览 15 | - QQ6.5 16 | - Facebook 17 | 18 | ### 临时: 19 | - 翻译/把一位酷友的繁体翻译放上去 -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sun May 03 16:34:20 GMT+08:00 2020 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/xloger/exlink/app/util/Tool.java: -------------------------------------------------------------------------------- 1 | package com.xloger.exlink.app.util; 2 | 3 | /** 4 | * Created on 2017/12/13 21:20. 5 | * Editor:xloger 6 | * Email:phoenix@xloger.com 7 | */ 8 | 9 | public class Tool { 10 | public static String test = "内容测试"; 11 | 12 | public static boolean isHook(){ 13 | return false; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_add.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/xloger/exlink/app/util/KotlinEx.kt: -------------------------------------------------------------------------------- 1 | package com.xloger.exlink.app.util 2 | 3 | import com.xloger.exlink.app.entity.App 4 | 5 | /** 6 | * Created by xloger on 2018/4/5. 7 | */ 8 | fun List.toSimpleString(): String { 9 | val ret = StringBuffer() 10 | this.forEach { 11 | ret.append("${it.appName},\n") 12 | } 13 | return ret.toString() 14 | } -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FF9800 4 | #F57C00 5 | #FF4081 6 | 7 | #212121 8 | #727272 9 | #B6B6B6 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/xloger/exlink/app/util/KotlinTool.kt: -------------------------------------------------------------------------------- 1 | package com.xloger.exlink.app.util 2 | 3 | import com.xloger.exlink.app.entity.App 4 | 5 | /** 6 | * Created on 2017/12/17 18:07. 7 | * Editor:xloger 8 | * Email:phoenix@xloger.com 9 | */ 10 | class KotlinTool { 11 | var test = "内容测试" 12 | 13 | fun testHook(): Boolean { 14 | return false 15 | } 16 | 17 | fun listAppToSimpleString(list: List) = list.toSimpleString() 18 | } -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/xloger/exlink/app/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.xloger.exlink.app; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/xloger/exlink/app/BaseApplication.java: -------------------------------------------------------------------------------- 1 | package com.xloger.exlink.app; 2 | 3 | import android.app.Application; 4 | 5 | import com.xloger.exlink.app.util.ExConfig; 6 | import com.xloger.exlink.app.util.FileUtil; 7 | 8 | /** 9 | * Created by xloger on 1月2日. 10 | * Author:xloger 11 | * Email:phoenix@xloger.com 12 | */ 13 | public class BaseApplication extends Application { 14 | @Override 15 | public void onCreate() { 16 | super.onCreate(); 17 | FileUtil.createInstance(this); 18 | ExConfig.INSTANCE.init(this); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/xloger/exlink/app/entity/App.kt: -------------------------------------------------------------------------------- 1 | package com.xloger.exlink.app.entity 2 | 3 | /** 4 | * Created by xloger on 1月1日. 5 | * Author:xloger 6 | * Email:phoenix@xloger.com 7 | */ 8 | data class App(var appName: String, 9 | var packageName: String, 10 | var rules: Set = emptySet(), 11 | var whiteUrl: Set = emptySet(), 12 | var isUse: Boolean = true, 13 | var isUserBuild: Boolean = true, 14 | var isTest: Boolean = false) 15 | 16 | data class AppList(val list: MutableList) -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_read_me.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/xloger/exlink/app/Constant.java: -------------------------------------------------------------------------------- 1 | package com.xloger.exlink.app; 2 | 3 | /** 4 | * Created by xloger on 1月2日. 5 | * Author:xloger 6 | * Email:phoenix@xloger.com 7 | */ 8 | public class Constant { 9 | public static final String APP_URL="/data/data/com.xloger.exlink.app/files/"; 10 | public static final String APP_FILE_NAME="AppData"; 11 | public static final String IS_DEBUG_FILE_NAME="isDebugModeFile.dat"; 12 | public static final String DIFFERENT_URL_FILE_NAME="DifferentUrl.dat"; 13 | 14 | public static final String PACKAGE_NAME = "com.xloger.exlink.app"; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/xloger/exlink/app/activity/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package com.xloger.exlink.app.activity; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | import android.support.v7.app.AppCompatActivity; 6 | 7 | /** 8 | * Created on 16/6/1 下午1:48. 9 | * Author: xloger 10 | * Email:phoenix@xloger.com 11 | */ 12 | public class BaseActivity extends AppCompatActivity { 13 | @Override 14 | protected void onCreate(@Nullable Bundle savedInstanceState) { 15 | super.onCreate(savedInstanceState); 16 | // startActivityForResult(); 17 | } 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_import_json.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 11 | 12 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/xloger/exlink/app/util/StreamUtilTest.java: -------------------------------------------------------------------------------- 1 | package com.xloger.exlink.app.util; 2 | 3 | 4 | /** 5 | * Created on 2018/4/26 20:49. 6 | * Author: xloger 7 | * Email:phoenix@xloger.com 8 | */ 9 | public class StreamUtilTest { 10 | public void isUrl() throws Exception { 11 | // assertTrue(StreamUtil.isUrl("http://baidu.com")); 12 | // assertTrue(StreamUtil.isUrl("https://baidu.com")); 13 | // assertTrue(StreamUtil.isUrl("www.baidu.com")); 14 | // assertTrue(StreamUtil.isUrl("baidu.com")); 15 | // assertTrue(StreamUtil.isUrl("sinaweibo://baidu.com")); 16 | // assertTrue(StreamUtil.isUrl("zhihu://baidu.com")); 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/xloger/exlink/app/view/Loading.java: -------------------------------------------------------------------------------- 1 | package com.xloger.exlink.app.view; 2 | 3 | import android.app.Dialog; 4 | import android.content.Context; 5 | import android.os.Bundle; 6 | 7 | import com.xloger.exlink.app.R; 8 | 9 | /** 10 | * Created by xloger on 7月17日. 11 | * Author:xloger 12 | * Email:phoenix@xloger.com 13 | */ 14 | public class Loading extends Dialog { 15 | public Loading(Context context) { 16 | super(context,android.R.style.Theme_DeviceDefault_Light_Dialog_NoActionBar); 17 | } 18 | 19 | @Override 20 | protected void onCreate(Bundle savedInstanceState) { 21 | super.onCreate(savedInstanceState); 22 | setContentView(R.layout.dialog_loading); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/step_three.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_edit_rule.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 |