diff --git a/app/build.gradle b/app/build.gradle index dbe1fc2..3d304d2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,14 +72,12 @@ android { flavorDimensions "default" versionCode 1 versionName "1.0" - signingConfig signingConfigs.debug } beta { flavorDimensions "default" versionCode 1 versionName "1.0" - signingConfig signingConfigs.debug buildConfigField "String", "test", '"测试文本"' } } @@ -87,9 +85,45 @@ android { sourceSets { beta.res.srcDirs = ['src/beta/res'] } + // externalNativeBuild { + // ndkBuild { + // path 'src/main/jni/Android.mk' + // } + // } + sourceSets.main { + jni.srcDirs = [] + jniLibs.srcDirs = ['src/main/jniLibs'] + } //签名 signingConfigs { + xueshibao{ + storeFile file("src/keystore/xueshibaoos.jks") + storePassword "123456" + keyAlias "xueshibaoos" + keyPassword "123456" + v1SigningEnabled true + v2SigningEnabled true + } + + zhanRui { + storeFile file("src/keystore/zhanxun.keystore") + storePassword "123456" + keyAlias "zhanxun" + keyPassword "123456" + v1SigningEnabled true + v2SigningEnabled true + } + + zhanRuiUserdebug { + storeFile file("src/keystore/zhanxunUserdebug.keystore") + storePassword "123456" + keyAlias "zhanxunUserdebug" + keyPassword "123456" + v1SigningEnabled true + v2SigningEnabled true + } + debug { storeFile file("src/keystore/tt.jks") storePassword "fht19961207" @@ -110,23 +144,40 @@ android { } buildTypes { -// externalNativeBuild { -// ndkBuild { -// path 'src/main/jni/Android.mk' -// } -// } - sourceSets.main { - jni.srcDirs = [] - jniLibs.srcDirs = ['src/main/jniLibs'] + zhanRuiRelease.initWith(release) + zhanRuiRelease { + buildConfigField "String", "platform", '"ZhanRui"' + signingConfig signingConfigs.zhanRui } + + zhanRuiDebug.initWith(debug) + zhanRuiDebug { + versionNameSuffix "-debug" + buildConfigField "String", "platform", '"ZhanRui"' + debuggable true + signingConfig signingConfigs.zhanRui + } + + //userdebug rom使用这个版本 + zhanRuiUserdebug.initWith(zhanRuiDebug) + zhanRuiUserdebug { + versionNameSuffix "-debug" + buildConfigField "String", "platform", '"ZhanRui"' + debuggable true + signingConfig signingConfigs.zhanRuiUserdebug + } + debug { - // 显示Log - buildConfigField "boolean", "LOG_DEBUG", "true" + buildConfigField "String", "platform", '"MTK"' + // 不显示Log + //buildConfigField "boolean", "LOG_DEBUG", "false" + // versionNameSuffix "-debug" minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //Zipalign优化 zipAlignEnabled true - signingConfig signingConfigs.debug + signingConfig signingConfigs.xueshibao applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile @@ -137,18 +188,18 @@ android { } } } + release { - // 不显示Log - buildConfigField "boolean", "LOG_DEBUG", "false" + buildConfigField "String", "platform", '"MTK"' //混淆 minifyEnabled false - //Zipalign优化 - zipAlignEnabled true //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + //Zipalign优化 + zipAlignEnabled true //签名 signingConfig signingConfigs.release -// 将release版本的包名重命名,加上版本及日期 + //将release版本的包名重命名,加上版本及日期 applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = "" @@ -160,6 +211,7 @@ android { } } } + } @@ -175,8 +227,8 @@ dependencies { androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' ////三方 //极光推送 - implementation 'cn.jiguang.sdk:jpush:3.7.0' // 此处以JPush 3.7.0 版本为例。 - implementation 'cn.jiguang.sdk:jcore:2.4.2' // 此处以JCore 2.4.2 版本为例。 + implementation 'cn.jiguang.sdk:jpush:3.8.6' // 此处以JPush 3.7.0 版本为例。 + implementation 'cn.jiguang.sdk:jcore:2.6.0' // 此处以JCore 2.4.2 版本为例。 //okhttp implementation 'com.squareup.okhttp3:okhttp:4.6.0' //RxJava和Retrofit diff --git a/app/src/keystore/zhanxunUserdebug.keystore b/app/src/keystore/zhanxunUserdebug.keystore new file mode 100644 index 0000000..6d8f9ee Binary files /dev/null and b/app/src/keystore/zhanxunUserdebug.keystore differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 70efa67..b75e851 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,20 +46,21 @@ android:supportsRtl="true" android:theme="@style/AppTheme"> - - - - - - - - + + + + + + + + + getHideAPP(); + + List getForbidAPP(); +} diff --git a/app/src/main/aidl/com/jiaoguanyi/appstore/IGetLicenseInterface.aidl b/app/src/main/aidl/com/jiaoguanyi/appstore/IGetLicenseInterface.aidl new file mode 100644 index 0000000..fca4c6f --- /dev/null +++ b/app/src/main/aidl/com/jiaoguanyi/appstore/IGetLicenseInterface.aidl @@ -0,0 +1,14 @@ +// IGetLicenseInterface.aidl +package com.jiaoguanyi.appstore; + +// Declare any non-default types here with import statements + +interface IGetLicenseInterface { + /** + * Demonstrates some basic types that you can use as parameters + * and return values in AIDL. + */ + void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, + double aDouble, String aString); + String getLicense(); +} diff --git a/app/src/main/aidl/com/notepad/uiui/INoteAidlInterface.aidl b/app/src/main/aidl/com/notepad/uiui/INoteAidlInterface.aidl new file mode 100644 index 0000000..f9d35f5 --- /dev/null +++ b/app/src/main/aidl/com/notepad/uiui/INoteAidlInterface.aidl @@ -0,0 +1,15 @@ +// INoteAidlInterface.aidl +package com.notepad.uiui; + +// Declare any non-default types here with import statements + +interface INoteAidlInterface { + /** + * Demonstrates some basic types that you can use as parameters + * and return values in AIDL. + */ + void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, + double aDouble, String aString); + + String getNote(); +} diff --git a/app/src/main/java/com/tt/activity/JMainActivity.java b/app/src/main/java/com/tt/activity/JMainActivity.java index 471518e..f1b594a 100644 --- a/app/src/main/java/com/tt/activity/JMainActivity.java +++ b/app/src/main/java/com/tt/activity/JMainActivity.java @@ -1,22 +1,36 @@ package com.tt.activity; +import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.ContentResolver; import android.content.ContentValues; +import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; +import android.content.ServiceConnection; import android.net.Uri; import android.os.Environment; +import android.os.IBinder; +import android.os.RemoteException; import android.provider.MediaStore; +import android.util.Log; import android.view.KeyEvent; import android.view.View; +import android.widget.Button; import android.widget.TextView; import android.widget.Toast; +import com.info.sn.IGetInfoInterface; +import com.jiaoguanyi.appstore.IGetLicenseInterface; +import com.notepad.uiui.INoteAidlInterface; import com.tt.base.BaseActivity; import com.tt.ttutils.R; +import com.tt.ttutils.java.ApkUtils; import com.tt.ttutils.java.ToastUtil; import com.tt.ttutils.jni.NDKTools; -import java.lang.annotation.Native; +import java.util.ArrayList; +import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; @@ -24,6 +38,16 @@ import butterknife.ButterKnife; public class JMainActivity extends BaseActivity { @BindView(R.id.textView) TextView textView; + @BindView(R.id.button) + Button button; + + private ServiceConnection mServiceConnection; + private INoteAidlInterface noteAidlInterface; + private ServiceConnection mLicenseServiceConnection; + private IGetLicenseInterface getLicenseInterface; + private ServiceConnection mIGetInfoConnection; + private IGetInfoInterface getInfoInterface; + private String TAG = JMainActivity.class.getSimpleName(); @Override protected int setLayoutResourceID() { @@ -46,18 +70,230 @@ public class JMainActivity extends BaseActivity { @Override protected void initData() { + registHideAppReceiver(); + registForbidAppReceiver(); + registerUserInfoReceiver(); String ndks = NDKTools.getStringFromNDK(); + mServiceConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName componentName, IBinder iBinder) { + noteAidlInterface = INoteAidlInterface.Stub.asInterface(iBinder); + Log.e(TAG, "onServiceConnected: "); + } + + @Override + public void onServiceDisconnected(ComponentName componentName) { + Log.e(TAG, "onServiceDisconnected: "); + noteAidlInterface = null; +// Intent intent = new Intent(); +// intent.setComponent(new ComponentName("com.notepad.uiui", "com.notepad.uiui.service.NoteService")); +// startService(intent); + } + }; + mLicenseServiceConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + getLicenseInterface = IGetLicenseInterface.Stub.asInterface(service); + } + + @Override + public void onServiceDisconnected(ComponentName name) { + getLicenseInterface = null; + + } + }; + + mIGetInfoConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + Log.e(TAG, "onServiceConnected: mIGetInfoConnection"); + getInfoInterface = IGetInfoInterface.Stub.asInterface(service); + } + + @Override + public void onServiceDisconnected(ComponentName name) { + Log.e(TAG, "onServiceDisconnected: mIGetInfoConnection"); + getInfoInterface = null; + bindinfoService(); + } + }; + + bindService(); + bindLicenseService(); + bindinfoService(); + +// Intent intent2 = new Intent(); +// intent2.setComponent(new ComponentName("com.info.sn", "com.notepad.uiui.service.NoteService")); +// startService(intent2); +// Intent intent = new Intent(); +// intent.setComponent(new ComponentName("com.notepad.uiui", "com.notepad.uiui.service.NoteService")); +// startService(intent); + + textView.setText(ndks); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - open(); +// open(); + bindService(); + try { + if (noteAidlInterface == null) { + bindService(); + Intent intent = new Intent(); + intent.setComponent(new ComponentName("com.notepad.uiui", "com.notepad.uiui.service.NoteService")); + startService(intent); + return; + } + Log.e(TAG, "onClick: " + noteAidlInterface); + String test = noteAidlInterface.getNote(); + Log.e(TAG, "onClick: " + test); + } catch (RemoteException e) { +// e.printStackTrace(); + Log.e(TAG, "onClick: " + e.getMessage()); + } + + } + }); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { +// ApkUtils.openApp(JMainActivity.this, "com.info.sn"); + if (getInfoInterface != null) { + try { + String userInfo = getInfoInterface.getUserInfo(); + Log.e("mIGetInfoConnection", "getUserInfo: " + userInfo); + List hideAPP = getInfoInterface.getHideAPP(); + Log.e("mIGetInfoConnection", "getHideAPP: " + hideAPP); + List forbidAPP = getInfoInterface.getForbidAPP(); + Log.e("mIGetInfoConnection", "getForbidAPP: " + forbidAPP); + textView.setText(userInfo); + } catch (RemoteException e) { + e.printStackTrace(); + Log.e("mIGetInfoConnection", "getUserInfo: " + e.getMessage()); + } + }else { + bindinfoService(); + } + + +// if (getLicenseInterface != null) { +// try { +// String license = getLicenseInterface.getLicense(); +// Log.e(TAG, "onClick: " + license); +// textView.setText(license); +// } catch (RemoteException e) { +// e.printStackTrace(); +// Log.e(TAG, "onClick: " + e.getMessage()); +// } +// } } }); } + private HideAppReceiver hideAppReceiver; + + private void registHideAppReceiver() { + if (hideAppReceiver == null) { + hideAppReceiver = new HideAppReceiver(); + } + IntentFilter filter = new IntentFilter(); + filter.addAction("UPDATE_HIDE_APP"); + registerReceiver(hideAppReceiver, filter); + } + + private class HideAppReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + Log.e(TAG, "onReceive: " + intent.getAction()); + ArrayList appList = intent.getStringArrayListExtra("hide_app_list"); + if (appList != null) { + Log.e(TAG, "onReceive: " + appList); + } + } + } + + private ForbidAppReceiver forbidAppReceiver; + + private void registForbidAppReceiver() { + if (forbidAppReceiver == null) { + forbidAppReceiver = new ForbidAppReceiver(); + } + IntentFilter filter = new IntentFilter(); + filter.addAction("UPDATE_FORBID_APP"); + registerReceiver(forbidAppReceiver, filter); + } + + private class ForbidAppReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + Log.e(TAG, "onReceive: " + intent.getAction()); + ArrayList appList = intent.getStringArrayListExtra("forbid_app_list"); + if (appList != null) { + Log.e(TAG, "onReceive: " + appList); + } + } + } + + private static final String UPDATE_USER_INFO = "UPDATE_USER_INFO"; + + private UserInfoReceiver userInfoReceiver; + + private void registerUserInfoReceiver() { + if (userInfoReceiver == null) { + userInfoReceiver = new UserInfoReceiver(); + } + IntentFilter filter = new IntentFilter(); + filter.addAction(UPDATE_USER_INFO); + registerReceiver(userInfoReceiver, filter); + + } + + private class UserInfoReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + Log.e(TAG, "onReceive: " + intent.getAction()); + String userInfo = intent.getStringExtra("user_info"); + Log.e(TAG, "onReceive: " + userInfo); + } + } + + + private void bindService() { + if (noteAidlInterface == null) { + //这是连接aidl服务的代码 + Intent intent = new Intent(); + intent.setAction("com.notepad.uiui.INoteAidlInterface"); + intent.setPackage("com.notepad.uiui"); + intent.setComponent(new ComponentName("com.notepad.uiui", "com.notepad.uiui.service.NoteService")); + bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE); + } + } + + private void bindLicenseService() { + if (getLicenseInterface == null) { + //这是连接aidl服务的代码 + Intent intent = new Intent(); + intent.setAction("com.jiaoguanyi.appstore.IGetLicenseInterface"); + intent.setPackage("com.jiaoguanyi.appstore"); + intent.setComponent(new ComponentName("com.jiaoguanyi.appstore", "com.mjsheng.myappstore.service.RemoteService")); + bindService(intent, mLicenseServiceConnection, Context.BIND_AUTO_CREATE); + } + } + + private void bindinfoService() { + if (getInfoInterface == null) { + //这是连接aidl服务的代码 + Intent intent = new Intent(); + intent.setAction("com.info.sn.IGetInfoInterface"); + intent.setPackage("com.info.sn"); + intent.setComponent(new ComponentName("com.info.sn", "com.info.sn.service.RemoteService")); + bindService(intent, mIGetInfoConnection, Context.BIND_AUTO_CREATE); + } + } + // 用来计算返回键的点击间隔时间 private long exitTime = 0; + @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK @@ -74,7 +310,8 @@ public class JMainActivity extends BaseActivity { return super.onKeyDown(keyCode, event); } - private long mPreClickTime=0; + + private long mPreClickTime = 0; private void lazyExit() { if (System.currentTimeMillis() - mPreClickTime > 1000) { @@ -101,4 +338,5 @@ public class JMainActivity extends BaseActivity { startActivityForResult(intent, 1); } } + } diff --git a/app/src/main/java/com/tt/activity/MainActivity.kt b/app/src/main/java/com/tt/activity/MainActivity.kt index 7f0f96e..1425306 100644 --- a/app/src/main/java/com/tt/activity/MainActivity.kt +++ b/app/src/main/java/com/tt/activity/MainActivity.kt @@ -1,21 +1,32 @@ package com.tt.activity +import android.content.ComponentName +import android.content.Context import android.content.Intent +import android.content.ServiceConnection import android.os.Bundle import android.os.Environment +import android.os.IBinder +import android.util.Log import android.widget.Button import androidx.appcompat.app.AppCompatActivity +import com.notepad.uiui.INoteAidlInterface import com.tt.ttutils.R import com.tt.ttutils.java.DevicesUtils import kotlinx.android.synthetic.main.activity_main.* import me.jessyan.autosize.internal.CancelAdapt import java.io.File +import kotlin.math.log + class MainActivity : AppCompatActivity(), CancelAdapt { lateinit var button: Button private val INSTALLAPK_ACTION = "JGY_INSTALLAPK_ACTION" private val INSTALLAPK_PREMISSIONS = "com.jiaoguanyi.appstore.permissions.INSTALL_APK" - lateinit var filePath:String + lateinit var filePath: String + lateinit var mServiceConnection: ServiceConnection + lateinit var noteAidlInterface: INoteAidlInterface + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -25,12 +36,35 @@ class MainActivity : AppCompatActivity(), CancelAdapt { filePath = Environment.getExternalStorageDirectory().absolutePath + File.separator + "Android_8.8.0.5420_537068981.apk" button = findViewById(R.id.button) - button.setOnClickListener { - val intent = Intent(INSTALLAPK_ACTION) - intent.putExtra("packageName", "com.tencent.mobileqq") - intent.putExtra("filePath", filePath) - sendBroadcast(intent, INSTALLAPK_PREMISSIONS) +// button.setOnClickListener { +// //教管壹静默安装代码 +// val intent = Intent(INSTALLAPK_ACTION) +// intent.putExtra("packageName", "com.tencent.mobileqq") +// intent.putExtra("filePath", filePath) +// sendBroadcast(intent, INSTALLAPK_PREMISSIONS) +// } + mServiceConnection = object : ServiceConnection { + override fun onServiceConnected( + componentName: ComponentName, + iBinder: IBinder + ) { + noteAidlInterface = INoteAidlInterface.Stub.asInterface(iBinder) + } + + override fun onServiceDisconnected(componentName: ComponentName) { + + } } + val intent = Intent("com.notepad.uiui.INoteAidlInterface") + intent.setPackage("com.notepad.uiui") + bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE) + + button.setOnClickListener { + val test = noteAidlInterface.note + Log.e("test", test) + } + + } diff --git a/app/src/main/java/com/tt/ttutils/java/ApkUtils.java b/app/src/main/java/com/tt/ttutils/java/ApkUtils.java index 8a6d9ab..ed99940 100644 --- a/app/src/main/java/com/tt/ttutils/java/ApkUtils.java +++ b/app/src/main/java/com/tt/ttutils/java/ApkUtils.java @@ -1,5 +1,15 @@ package com.tt.ttutils.java; +import android.content.Context; +import android.content.Intent; + public class ApkUtils { + public static void openApp(Context context, String packageName) { + Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName); + if (intent != null) { +// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + } } diff --git a/viewlibrary/build.gradle b/viewlibrary/build.gradle index 7fd501a..9176d00 100644 --- a/viewlibrary/build.gradle +++ b/viewlibrary/build.gradle @@ -14,10 +14,37 @@ android { consumerProguardFiles 'consumer-rules.pro' } + productFlavors { + official { + flavorDimensions "default" + } + + beta { + flavorDimensions "default" + } + } + + + buildTypes { + zhanRuiRelease { + + } + + zhanRuiDebug { + + } + + zhanRuiUserdebug { + + } + + debug { + + } + release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } }