├── .gitignore ├── AndroidHiddenAPI └── android │ ├── app │ ├── ActionBar.java │ ├── ActivityManager.java │ ├── ActivityThread.java │ ├── AppGlobals.java │ ├── Application.java │ ├── ApplicationThread.java │ └── IApplicationThread.java │ ├── content │ ├── ComponentName.java │ ├── IntentFilter.java │ ├── pm │ │ ├── ActivityInfo.java │ │ ├── ApplicationInfo.java │ │ ├── IPackageManager.java │ │ └── PackageParser.java │ └── res │ │ └── Configuration.java │ └── os │ ├── IBinder.java │ ├── Process.java │ ├── RemoteException.java │ ├── ServiceManager.java │ └── UserHandle.java ├── AndroidManifest.xml ├── Makefile ├── README.md ├── aosp ├── android-5-0.md ├── android-5-1.md └── android-6-0.md ├── assets └── xposed_init ├── build.gradle ├── custom_rules.xml ├── lib ├── AndroidHiddenAPI.jar └── XposedBridgeApi-30.jar ├── libs └── android-support-v4.jar ├── proguard-project.txt ├── res ├── drawable-hdpi │ ├── ic_launcher.png │ ├── ic_menu_block.png │ ├── ic_menu_star.png │ └── ic_menu_stop.png ├── drawable-mdpi │ ├── ic_launcher.png │ ├── ic_menu_block.png │ ├── ic_menu_star.png │ └── ic_menu_stop.png ├── drawable-xhdpi │ ├── ic_launcher.png │ ├── ic_menu_block.png │ ├── ic_menu_star.png │ └── ic_menu_stop.png ├── layout │ ├── item.xml │ ├── list.xml │ └── main.xml ├── values-in │ └── strings.xml ├── values-v11 │ └── styles.xml ├── values-v21 │ └── styles.xml ├── values-zh-rCN │ └── strings.xml └── values │ ├── attrs.xml │ ├── colors.xml │ ├── strings.xml │ └── styles.xml └── src ├── android └── support │ └── v4 │ └── app │ └── FragmentUtils.java └── me └── piebridge └── prevent ├── common ├── GmsUtils.java ├── PackageUtils.java └── PreventIntent.java ├── framework ├── ActivityManagerServiceHook.java ├── ActivityReceiver.java ├── CheckingRunningService.java ├── IntentFilterHook.java ├── IntentFilterMatchResult.java ├── PreventLog.java ├── SystemHook.java ├── SystemReceiver.java └── util │ ├── AccountWatcher.java │ ├── ActivityRecordUtils.java │ ├── AlarmManagerServiceUtils.java │ ├── BroadcastFilterUtils.java │ ├── HideApiUtils.java │ ├── HookUtils.java │ ├── LogUtils.java │ ├── LogcatUtils.java │ ├── NotificationManagerServiceUtils.java │ ├── ProcessRecordUtils.java │ ├── SafeActionUtils.java │ └── TaskRecordUtils.java ├── ui ├── PreventActivity.java ├── PreventFragment.java ├── PreventProvider.java ├── PreventReceiver.java ├── UILog.java └── util │ ├── PreventListUtils.java │ ├── PreventUtils.java │ └── RecreateUtils.java └── xposed ├── SystemServiceHook.java └── XposedMod.java /.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /gen 3 | /obj 4 | 5 | ant.properties 6 | local.properties 7 | project.properties 8 | build.xml 9 | custom_rules.xml 10 | proguard-project.txt 11 | 12 | /.classpath 13 | /.project 14 | /.settings 15 | 16 | *.log 17 | 18 | .DS_Store 19 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/app/ActionBar.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | public class ActionBar { 4 | 5 | public void setActionBarViewCollapsable(boolean collapsable) { 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/app/ActivityManager.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | import java.util.List; 4 | 5 | import android.content.ComponentName; 6 | 7 | public class ActivityManager { 8 | 9 | /** 10 | * @hide 11 | */ 12 | public void forceStopPackage(String packageName) { 13 | } 14 | 15 | public List getRunningServices(int maxNum) throws SecurityException { 16 | throw new UnsupportedOperationException(); 17 | } 18 | 19 | public List getRunningAppProcesses() { 20 | throw new UnsupportedOperationException(); 21 | } 22 | 23 | public static class RunningAppProcessInfo { 24 | } 25 | 26 | public static class RunningServiceInfo { 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/app/ActivityThread.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | import android.content.res.Configuration; 4 | import android.os.IBinder; 5 | import android.os.RemoteException; 6 | 7 | /** 8 | * @hide 9 | */ 10 | public class ActivityThread { 11 | 12 | public static Application currentApplication() { 13 | throw new UnsupportedOperationException(); 14 | } 15 | 16 | public ApplicationThread getApplicationThread() { 17 | throw new UnsupportedOperationException(); 18 | } 19 | 20 | private abstract class ApplicationThread implements IApplicationThread { 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/app/AppGlobals.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | import android.content.pm.IPackageManager; 4 | 5 | public class AppGlobals { 6 | 7 | public static IPackageManager getPackageManager() { 8 | throw new UnsupportedOperationException(); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/app/Application.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | public class Application { 4 | } 5 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/app/ApplicationThread.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | public class ApplicationThread { 4 | } 5 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/app/IApplicationThread.java: -------------------------------------------------------------------------------- 1 | package android.app; 2 | 3 | import android.content.res.Configuration; 4 | import android.os.IBinder; 5 | import android.os.RemoteException; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @hide 11 | */ 12 | public interface IApplicationThread { 13 | 14 | void scheduleRelaunchActivity(IBinder token, List pendingResults, List pendingNewIntents, int configChanges, boolean notResumed, Configuration config) throws RemoteException; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/content/ComponentName.java: -------------------------------------------------------------------------------- 1 | package android.content; 2 | 3 | public class ComponentName { 4 | } 5 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/content/IntentFilter.java: -------------------------------------------------------------------------------- 1 | package android.content; 2 | 3 | public class IntentFilter { 4 | } 5 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/content/pm/ActivityInfo.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | public class ActivityInfo { 4 | } 5 | 6 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/content/pm/ApplicationInfo.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | public class ApplicationInfo { 4 | } 5 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/content/pm/IPackageManager.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | public interface IPackageManager { 4 | 5 | boolean isProtectedBroadcast(String actionName); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/content/pm/PackageParser.java: -------------------------------------------------------------------------------- 1 | package android.content.pm; 2 | 3 | import java.util.ArrayList; 4 | 5 | /** 6 | * @hide 7 | */ 8 | public class PackageParser { 9 | 10 | public static class IntentInfo { 11 | } 12 | 13 | public static class ActivityIntentInfo extends IntentInfo { 14 | public Activity activity; 15 | } 16 | 17 | public static class ServiceIntentInfo extends IntentInfo { 18 | public Service service; 19 | } 20 | 21 | public static class Component { 22 | public Package owner; 23 | public String className; 24 | } 25 | 26 | public static class Activity extends Component { 27 | public ActivityInfo info; 28 | } 29 | 30 | public static class Service extends Component { 31 | } 32 | 33 | public static class Package { 34 | public ApplicationInfo applicationInfo; 35 | public ArrayList activities; 36 | public ArrayList receivers; 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/content/res/Configuration.java: -------------------------------------------------------------------------------- 1 | package android.content.res; 2 | 3 | public class Configuration { 4 | } 5 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/os/IBinder.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public class IBinder { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/os/Process.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public class Process { 4 | 5 | public static final int SYSTEM_UID = 1000; 6 | 7 | /** 8 | * @hide 9 | */ 10 | public static final void readProcLines(String path, String[] reqFields, long[] outSizes) { 11 | } 12 | 13 | /** 14 | * @hide 15 | */ 16 | public static final int getUidForPid(int pid) { 17 | throw new UnsupportedOperationException(); 18 | } 19 | 20 | public static final void killProcess(int pid) { 21 | } 22 | 23 | public static final int myUid() { 24 | throw new UnsupportedOperationException(); 25 | } 26 | 27 | public static final int myPid() { 28 | throw new UnsupportedOperationException(); 29 | } 30 | 31 | public static final int myTid() { 32 | throw new UnsupportedOperationException(); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/os/RemoteException.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public class RemoteException extends Exception { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/os/ServiceManager.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public final class ServiceManager { 4 | public static IBinder getService(String name) { 5 | throw new UnsupportedOperationException(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /AndroidHiddenAPI/android/os/UserHandle.java: -------------------------------------------------------------------------------- 1 | package android.os; 2 | 3 | public final class UserHandle { 4 | 5 | public static final int USER_ALL = -1; 6 | 7 | public static final UserHandle ALL = new UserHandle(USER_ALL); 8 | 9 | public UserHandle(int h) { 10 | } 11 | 12 | } 13 | 14 | -------------------------------------------------------------------------------- /AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 16 | 17 | 20 | 21 | 22 | 27 | 30 | 33 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | lib/AndroidHiddenAPI.jar: AndroidHiddenAPI/android/app/ActivityManager.java AndroidHiddenAPI/android/app/ActivityThread.java AndroidHiddenAPI/android/content/pm/PackageParser.java AndroidHiddenAPI/android/os/Process.java AndroidHiddenAPI/android/os/ServiceManager.java AndroidHiddenAPI/android/os/UserHandle.java AndroidHiddenAPI/android/app/ActionBar.java AndroidHiddenAPI/android/app/AppGlobals.java AndroidHiddenAPI/android/content/pm/IPackageManager.java 2 | javac AndroidHiddenAPI/android/app/*.java AndroidHiddenAPI/android/content/pm/*.java AndroidHiddenAPI/android/os/*.java AndroidHiddenAPI/android/content/*.java AndroidHiddenAPI/android/content/res/*.java AndroidHiddenAPI/android/app/AppGlobals.java AndroidHiddenAPI/android/content/pm/IPackageManager.java 3 | cd AndroidHiddenAPI; jar -cvf ../lib/AndroidHiddenAPI.jar android/app/ActivityManager.class android/app/ActivityThread*.class android/app/IApplicationThread.class android/content/pm/PackageParser*.class android/os/Process.class android/os/ServiceManager.class android/os/UserHandle.class android/app/ActionBar.class android/app/AppGlobals.class android/content/pm/IPackageManager.class 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #说明 2 | 3 | “阻止运行”源码是我之前clone下来的,作者是@liudongmiao,看到酷安上有许多人要,我就上来了 4 | 5 | 6 | #其他 7 | 8 | 暂无 9 | 10 | #联系 11 | 12 | 博客:http://www3.info 13 | 14 | 邮箱:os@live.it 15 | -------------------------------------------------------------------------------- /aosp/android-5-0.md: -------------------------------------------------------------------------------- 1 | [园子大魔王](https://www3.info) 2 | 3 | “阻止运行”支持非Xposed模式,但是需要改动系统。改动有两种方式,一是源码方式,二是直接smali方式。目前提供android 5.X和android 6.0的补丁,本文适用于android 5.0。 4 | 5 | * 说明 6 | 7 | ``` 8 | 命令行> 命令 9 | ``` 10 | 11 | 表示在`电脑`的`命令行`中执行`命令`,如果没有特别声明,Linux/Mac OS X/Windows下均可使用。 12 | 13 | # smali 方式 14 | 15 | ## 需求 16 | - [java](http://www.oracle.com/technetwork/java/javase/downloads/index.html) 运行smali/baksmali需要Java,请下载JDK。 17 | - [smali](http://github.com/JesusFreke/smali) 把smali源码编译成dex,请使用2.1.1及以上版本,二进制下载在 [smali ‐ Bitbucket](https://bitbucket.org/JesusFreke/smali/downloads) 上。 18 | - [baksmali](http://github.com/JesusFreke/smali) 把dex反编译成smali,请使用2.1.1及以上版本,二进制下载`也`在 [smali ‐ Bitbucket](https://bitbucket.org/JesusFreke/smali/downloads) 上。 19 | - patch 打补丁,Linux/Mac OS X下自带,windows需要下载[Patch for Windows](http://gnuwin32.sourceforge.net/packages/patch.htm),另外[Git for Windows](https://git-for-windows.github.io/)也自带。 20 | - [api-21.smali.patch](api-21.smali.patch), [api-21.patch](api-21.patch) 21 | - (可选) [oat2dex](https://github.com/testwhat/SmaliEx/) 把oat转换成dex,二进制下载在 [Releases - testwhat/SmaliEx](https://github.com/testwhat/SmaliEx/releases) 上。 22 | 23 | ## 从系统中获取 `services.jar` 24 | 25 | ``` 26 | 命令行> adb pull /system/framework/services.jar 27 | ``` 28 | 29 | 如果`services.jar`很小,只有几百个字节的话,那么系统是经过优化的,需要下载`services.odex`以及`boot.oat`。 30 | 31 | ## 反编译 `services` 32 | 33 | ### 反编译 `services.jar` 34 | 35 | `baksmali`加上`-b -s`参数是为了去掉调试信息,因为补丁文件也是这样生成的。 36 | 37 | ``` 38 | 命令行> java -jar baksmali.jar -a 21 -b -s services.jar -o services 39 | ``` 40 | 41 | ### 反编译 `services.odex` 42 | 43 | `baksmali`支持6.0的OAT格式,但是不支持5.X的OAT格式。所以,5.X需要额外下载`oat2dex`。 44 | 45 | ``` 46 | 命令行> java -jar oat2dex.jar boot boot.oat 47 | 命令行> java -jar oat2dex.jar services.odex dex/ 48 | 命令行> java -jar baksmali.jar -a 21 -b -s services.dex -o services 49 | ``` 50 | 51 | ## 打补丁 52 | 53 | ``` 54 | Linux/Mac OS X命令行> # Linux / Mac OS X使用 55 | Linux/Mac OS X命令行> patch -p0 < api-21.smali.patch 56 | ``` 57 | 58 | 在Windows的某些版本下(如windows 7),名称中含`patch`的程序,必须额外加上特定的`manifest`,否则不能运行,所以换个名字吧。此外,由于补丁文件不是在Windows下生成,所以需要先转换成Windows的\r\n格式。 59 | 60 | ``` 61 | Windows命令行> :: Windows 使用 62 | Windows命令行> move patch.exe p@tch.exe 63 | Windows命令行> type api-21.smali.patch | more /p > api-21.win32.smali.patch 64 | Windows命令行> p@tch.exe -p0 < api-21.smali.patch 65 | ``` 66 | 67 | 如果有出现任何 `*.orig` 文件,都需要仔细确认;如果无法确认,请联系作者。 68 | 69 | ## 重新打包 `services.jar` 70 | 71 | `smali`加上`-j 1`参数可以保证每次生成的dex文件一样。 72 | 73 | ``` 74 | 命令行> java -jar smali.jar -a 21 -j 1 -o classes.dex services 75 | 命令行> jar -cvf services.jar classes.dex 76 | ``` 77 | 78 | ## 更新 `services.jar` 79 | 80 | 把 `services.jar` 放入系统 `/system/framework/`,重启。 81 | 82 | ## 进阶方式 83 | 84 | 把改过后的文件,打成一个包 `pr.jar`,然后改动 `boot.img` 中的 `init.environ.rc`,在这个前面加入 `pr.jar`,可以不用改动系统分区。 85 | 86 | # 源码 方式 87 | 88 | 这个方式适合从头开始编译的ROM系统,只需要在 `frameworks/base` 下应用 `api-21.patch` 补丁即可。 89 | 90 | ``` 91 | 命令行> cd frameworks/base 92 | 命令行> patch -p1 < /path/to/api-21.patch 93 | 命令行> mmm services:services 94 | ``` 95 | -------------------------------------------------------------------------------- /aosp/android-5-1.md: -------------------------------------------------------------------------------- 1 | [园子大魔王](https://www3.info) 2 | 3 | “阻止运行”支持非Xposed模式,但是需要改动系统。改动有两种方式,一是源码方式,二是直接smali方式。目前提供android 5.X和android 6.0的补丁,本文适用于android 5.1。 4 | 5 | * 说明 6 | 7 | ``` 8 | 命令行> 命令 9 | ``` 10 | 11 | 表示在`电脑`的`命令行`中执行`命令`,如果没有特别声明,Linux/Mac OS X/Windows下均可使用。 12 | 13 | # smali 方式 14 | 15 | ## 需求 16 | - [java](http://www.oracle.com/technetwork/java/javase/downloads/index.html) 运行smali/baksmali需要Java,请下载JDK。 17 | - [smali](http://github.com/JesusFreke/smali) 把smali源码编译成dex,请使用2.1.1及以上版本,二进制下载在 [smali ‐ Bitbucket](https://bitbucket.org/JesusFreke/smali/downloads) 上。 18 | - [baksmali](http://github.com/JesusFreke/smali) 把dex反编译成smali,请使用2.1.1及以上版本,二进制下载`也`在 [smali ‐ Bitbucket](https://bitbucket.org/JesusFreke/smali/downloads) 上。 19 | - patch 打补丁,Linux/Mac OS X下自带,windows需要下载[Patch for Windows](http://gnuwin32.sourceforge.net/packages/patch.htm),另外[Git for Windows](https://git-for-windows.github.io/)也自带。 20 | - [api-22.smali.patch](api-22.smali.patch), [api-22.patch](api-22.patch) 21 | - (可选) [oat2dex](https://github.com/testwhat/SmaliEx/) 把oat转换成dex,二进制下载在 [Releases - testwhat/SmaliEx](https://github.com/testwhat/SmaliEx/releases) 上。 22 | 23 | ## 从系统中获取 `services.jar` 24 | 25 | ``` 26 | 命令行> adb pull /system/framework/services.jar 27 | ``` 28 | 29 | 如果`services.jar`很小,只有几百个字节的话,那么系统是经过优化的,需要下载`services.odex`以及`boot.oat`。 30 | 31 | ## 反编译 `services` 32 | 33 | ### 反编译 `services.jar` 34 | 35 | `baksmali`加上`-b -s`参数是为了去掉调试信息,因为补丁文件也是这样生成的。 36 | 37 | ``` 38 | 命令行> java -jar baksmali.jar -a 22 -b -s services.jar -o services 39 | ``` 40 | 41 | ### 反编译 `services.odex` 42 | 43 | `baksmali`支持6.0的OAT格式,但是不支持5.X的OAT格式。所以,5.X需要额外下载`oat2dex`。 44 | 45 | ``` 46 | 命令行> java -jar oat2dex.jar boot boot.oat 47 | 命令行> java -jar oat2dex.jar services.odex dex/ 48 | 命令行> java -jar baksmali.jar -a 22 -b -s services.dex -o services 49 | ``` 50 | 51 | ## 打补丁 52 | 53 | ``` 54 | Linux/Mac OS X命令行> # Linux / Mac OS X使用 55 | Linux/Mac OS X命令行> patch -p0 < api-22.smali.patch 56 | ``` 57 | 58 | 在Windows的某些版本下(如windows 7),名称中含`patch`的程序,必须额外加上特定的`manifest`,否则不能运行,所以换个名字吧。此外,由于补丁文件不是在Windows下生成,所以需要先转换成Windows的\r\n格式。 59 | 60 | ``` 61 | Windows命令行> :: Windows 使用 62 | Windows命令行> move patch.exe p@tch.exe 63 | Windows命令行> type api-22.smali.patch | more /p > api-22.win32.smali.patch 64 | Windows命令行> p@tch.exe -p0 < api-22.win32.smali.patch 65 | ``` 66 | 67 | 如果有出现任何 `*.orig` 文件,都需要仔细确认;如果无法确认,请联系作者。 68 | 69 | ## 重新打包 `services.jar` 70 | 71 | `smali`加上`-j 1`参数可以保证每次生成的dex文件一样。 72 | 73 | ``` 74 | 命令行> java -jar smali.jar -a 22 -j 1 -o classes.dex services 75 | 命令行> jar -cvf services.jar classes.dex 76 | ``` 77 | 78 | ## 更新 `services.jar` 79 | 80 | 把 `services.jar` 放入系统 `/system/framework/`,重启。 81 | 82 | ## 进阶方式 83 | 84 | 把改过后的文件,打成一个包 `pr.jar`,然后改动 `boot.img` 中的 `init.environ.rc`,在这个前面加入 `pr.jar`,可以不用改动系统分区。 85 | 86 | # 源码 方式 87 | 88 | 这个方式适合从头开始编译的ROM系统,只需要在 `frameworks/base` 下应用 `api-22.patch` 补丁即可。 89 | 90 | ``` 91 | 命令行> cd frameworks/base 92 | 命令行> patch -p1 < /path/to/api-22.patch 93 | 命令行> mmm services:services 94 | ``` 95 | -------------------------------------------------------------------------------- /aosp/android-6-0.md: -------------------------------------------------------------------------------- 1 | [园子大魔王](https://www3.info) 2 | 3 | “阻止运行”支持非Xposed模式,但是需要改动系统。改动有两种方式,一是源码方式,二是直接smali方式。目前提供android 5.X和android 6.0的补丁,本文适用于android 6.0。 4 | 5 | * 说明 6 | 7 | ``` 8 | 命令行> 命令 9 | ``` 10 | 11 | 表示在`电脑`的`命令行`中执行`命令`,如果没有特别声明,Linux/Mac OS X/Windows下均可使用。 12 | 13 | # smali 方式 14 | 15 | ## 需求 16 | - [java](http://www.oracle.com/technetwork/java/javase/downloads/index.html) 运行smali/baksmali需要Java,请下载JDK。 17 | - [smali](http://github.com/JesusFreke/smali) 把smali源码编译成dex,请使用2.1.1及以上版本,二进制下载在 [smali ‐ Bitbucket](https://bitbucket.org/JesusFreke/smali/downloads) 上。 18 | - [baksmali](http://github.com/JesusFreke/smali) 把dex反编译成smali,请使用2.1.1及以上版本,二进制下载`也`在 [smali ‐ Bitbucket](https://bitbucket.org/JesusFreke/smali/downloads) 上。 19 | - patch 打补丁,Linux/Mac OS X下自带,windows需要下载[Patch for Windows](http://gnuwin32.sourceforge.net/packages/patch.htm),另外[Git for Windows](https://git-for-windows.github.io/)也自带。 20 | - [api-23.smali.patch](api-23.smali.patch), [api-23.patch](api-23.patch) 21 | - (可选) [oat2dex](https://github.com/testwhat/SmaliEx/) 把oat转换成dex,二进制下载在 [Releases - testwhat/SmaliEx](https://github.com/testwhat/SmaliEx/releases) 上。 22 | 23 | ## 从系统中获取 `services.jar` 24 | 25 | ``` 26 | 命令行> adb pull /system/framework/services.jar 27 | ``` 28 | 29 | 如果`services.jar`很小,只有几百个字节的话,那么系统是经过优化的,需要下载`services.odex`以及`boot.oat`。 30 | 31 | ## 反编译 `services` 32 | 33 | ### 反编译 `services.jar` 34 | 35 | `baksmali`加上`-b -s`参数是为了去掉调试信息,因为补丁文件也是这样生成的。 36 | 37 | ``` 38 | 命令行> java -jar baksmali.jar -a 23 -b -s services.jar -o services 39 | ``` 40 | 41 | ### 反编译 `services.odex` 42 | 43 | `baksmali`支持6.0的OAT格式,但是不支持5.X的OAT格式。所以,5.X需要额外下载`oat2dex`。 44 | 45 | ``` 46 | 命令行> java -jar baksmali.jar -a 23 -x -c boot.oat -d . -b -s services.odex -o services 47 | ``` 48 | 49 | ## 打补丁 50 | 51 | ``` 52 | Linux/Mac OS X命令行> # Linux / Mac OS X使用 53 | Linux/Mac OS X命令行> patch -p0 < api-23.smali.patch 54 | ``` 55 | 56 | 在Windows的某些版本下(如windows 7),名称中含`patch`的程序,必须额外加上特定的`manifest`,否则不能运行,所以换个名字吧。此外,由于补丁文件不是在Windows下生成,所以需要先转换成Windows的\r\n格式。 57 | 58 | ``` 59 | Windows命令行> :: Windows 使用 60 | Windows命令行> move patch.exe p@tch.exe 61 | Windows命令行> type api-23.smali.patch | more /p > api-23.win32.smali.patch 62 | Windows命令行> p@tch.exe -p0 < api-23.win32.smali.patch 63 | ``` 64 | 65 | 如果有出现任何 `*.orig` 文件,都需要仔细确认;如果无法确认,请联系作者。 66 | 67 | ## 重新打包 `services.jar` 68 | 69 | `smali`加上`-j 1`参数可以保证每次生成的dex文件一样。 70 | 71 | ``` 72 | 命令行> java -jar smali.jar -a 23 -j 1 -o classes.dex services 73 | 命令行> jar -cvf services.jar classes.dex 74 | ``` 75 | 76 | ## 更新 `services.jar` 77 | 78 | 把 `services.jar` 放入系统 `/system/framework/`,重启。 79 | 80 | ## 进阶方式 81 | 82 | 把改过后的文件,打成一个包 `pr.jar`,然后改动 `boot.img` 中的 `init.environ.rc`,在这个前面加入 `pr.jar`,可以不用改动系统分区。 83 | 84 | # 源码 方式 85 | 86 | 这个方式适合从头开始编译的ROM系统,只需要在 `frameworks/base` 下应用 `api-23.patch` 补丁即可。 87 | 88 | ``` 89 | 命令行> cd frameworks/base 90 | 命令行> patch -p1 < /path/to/api-23.patch 91 | 命令行> mmm services:services 92 | ``` 93 | -------------------------------------------------------------------------------- /assets/xposed_init: -------------------------------------------------------------------------------- 1 | me.piebridge.prevent.xposed.XposedMod -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | jcenter() 4 | } 5 | 6 | dependencies { 7 | classpath 'com.android.tools.build:gradle:1.3.1' 8 | } 9 | } 10 | 11 | apply plugin: 'android' 12 | 13 | android { 14 | compileSdkVersion 23 15 | buildToolsVersion "23.0.1" 16 | 17 | defaultConfig { 18 | versionCode Integer.parseInt('git rev-list HEAD --count'.execute().text.trim()) 19 | versionName 'git describe --tags'.execute().text.trim().substring(1) 20 | buildConfigField "boolean", "RELEASE", (versionName.contains("alpha") || versionName.contains("beta")) ? "false" : "true" 21 | buildConfigField "boolean", "WECHAT_DONATE", "false" 22 | buildConfigField "boolean", "ALIPAY_DONATE", "false" 23 | buildConfigField "String", "WECHAT_ACCOUNT", "null" 24 | buildConfigField "String", "ALIPAY_ACCOUNT", "null" 25 | } 26 | 27 | buildTypes { 28 | release { 29 | minifyEnabled true 30 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' 31 | } 32 | } 33 | 34 | sourceSets { 35 | main { 36 | manifest.srcFile 'AndroidManifest.xml' 37 | java.srcDirs = ['src'] 38 | resources.srcDirs = ['src'] 39 | aidl.srcDirs = ['src'] 40 | renderscript.srcDirs = ['src'] 41 | res.srcDirs = ['res'] 42 | assets.srcDirs = ['assets'] 43 | } 44 | androidTest.setRoot('tests') 45 | } 46 | 47 | if (new File("ant.properties").exists()) { 48 | Properties properties = new Properties() 49 | properties.load(new FileInputStream(file("ant.properties"))) 50 | 51 | signingConfigs { 52 | release { 53 | storeFile file(properties['key.store']) 54 | storePassword properties['key.store.password'] 55 | keyAlias properties['key.alias'] 56 | keyPassword properties['key.alias.password'] 57 | } 58 | } 59 | 60 | buildTypes { 61 | release { 62 | signingConfig signingConfigs.release 63 | } 64 | debug { 65 | signingConfig signingConfigs.release 66 | } 67 | } 68 | } 69 | 70 | compileOptions { 71 | sourceCompatibility JavaVersion.VERSION_1_7 72 | targetCompatibility JavaVersion.VERSION_1_7 73 | } 74 | } 75 | 76 | dependencies { 77 | provided fileTree(dir: 'lib', include: ['*.jar']) 78 | compile fileTree(dir: 'libs', include: ['*.jar']) 79 | } 80 | 81 | tasks.withType(JavaCompile) { 82 | options.compilerArgs << '-Xlint:unchecked' << '-Xlint:deprecation' 83 | options.compilerArgs << '-Xbootclasspath/p:' + fileTree(dir: 'lib', include: ['*.jar']).files.join(':') 84 | } 85 | -------------------------------------------------------------------------------- /custom_rules.xml: -------------------------------------------------------------------------------- 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 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /lib/AndroidHiddenAPI.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/lib/AndroidHiddenAPI.jar -------------------------------------------------------------------------------- /lib/XposedBridgeApi-30.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/lib/XposedBridgeApi-30.jar -------------------------------------------------------------------------------- /libs/android-support-v4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/libs/android-support-v4.jar -------------------------------------------------------------------------------- /proguard-project.txt: -------------------------------------------------------------------------------- 1 | # To enable ProGuard in your project, edit project.properties 2 | # to define the proguard.config property as described in that file. 3 | # 4 | # Add project specific ProGuard rules here. 5 | # By default, the setFlags in this file are appended to setFlags specified 6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt 7 | # You can edit the include path and order by changing the ProGuard 8 | # include property in project.properties. 9 | # 10 | # For more details, see 11 | # http://developer.android.com/guide/developing/tools/proguard.html 12 | 13 | # Add any project specific keep options here: 14 | 15 | # If your project uses WebView with JS, uncomment the following 16 | # and specify the fully qualified class name to the JavaScript interface 17 | # class: 18 | 19 | -keepattributes SourceFile,LineNumberTable 20 | 21 | -keepnames class android.support.** { *; } 22 | # -keepnames class me.piebridge.** { *; } 23 | 24 | -keep class me.piebridge.prevent.xposed.XposedMod { public *; } 25 | 26 | -keep class me.piebridge.prevent.common.PackageUtils { boolean canPrevent(android.content.pm.PackageManager,android.content.pm.ApplicationInfo); } 27 | -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_menu_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/res/drawable-hdpi/ic_menu_block.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_menu_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/res/drawable-hdpi/ic_menu_star.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_menu_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/res/drawable-hdpi/ic_menu_stop.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_menu_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/res/drawable-mdpi/ic_menu_block.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_menu_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/res/drawable-mdpi/ic_menu_star.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_menu_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/res/drawable-mdpi/ic_menu_stop.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_menu_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/res/drawable-xhdpi/ic_menu_block.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_menu_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/res/drawable-xhdpi/ic_menu_star.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_menu_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/W3INFO/ForceStopGB/a652b5c88200616f60b2ab7c9f154ff6496f31bf/res/drawable-xhdpi/ic_menu_stop.png -------------------------------------------------------------------------------- /res/layout/item.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 17 | 18 | 23 | 24 | 30 | 31 | 40 | 41 | 48 | 49 | 57 | 58 | 59 | 66 | 67 | -------------------------------------------------------------------------------- /res/layout/list.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 16 | 17 | 23 | 24 | 32 | 33 | 34 | 35 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /res/layout/main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 21 | 22 | 23 | 27 | 28 |