This commit is contained in:
acgist
2023-03-27 13:16:46 +08:00
parent 4b706478d1
commit aef23db962
15 changed files with 178 additions and 50 deletions

View File

@@ -37,26 +37,26 @@ git config --global user.name "acgist"
./repo sync ./repo sync
``` ```
ROOT权限
## 裁剪 ## 裁剪
``` ```
# 应用 # 应用
build/target/product/handheld_*.mk
# 驱动
# root # root
userdebug
# framework # framework
``` ```
## 驱动
`Google`官方只提供了`Nexus``Pixel`的驱动
## 编译 ## 编译
``` ```
source build/envsetup.sh
lunch aosp_arm64-user lunch aosp_arm64-user
make -j 8 make -j 8
make udpatepackage
``` ```
## 刷机 ## 刷机
@@ -64,9 +64,61 @@ make -j 8
``` ```
adb reboot bootloader adb reboot bootloader
fastboot flashall fastboot flashall
fastboot -w update aosp_arm64-img-eng.xxx.zip
``` ```
## 小米5S
https://blog.csdn.net/u012932409/article/details/106792906 由于使用小米5S作为测试机没有适合的`LineageOS`版本,所有这里选择了`PixelExperience`作为测试系统,如果其他机器建议使用`LineageOS``ROM`下载地址:
https://blog.csdn.net/qq_33240707/article/details/123704679
https://blog.csdn.net/weixin_42929891/article/details/122667831 ### TWRP
* https://twrp.me/Devices/
### MIUI
* 卡刷http://bigota.d.miui.com/V11.0.2.0.OAGCNXM/miui_MI5S_V11.0.2.0.OAGCNXM_6ce204eb2c_8.0.zip
* 线刷http://bigota.d.miui.com/V11.0.2.0.OAGCNXM/capricorn_images_V11.0.2.0.OAGCNXM_20191023.0000.00_8.0_cn_714988e4b7.tgz
* 文章https://web.vip.miui.com/page/info/mio/mio/detail?isTop=0&postId=17843063
### PixelExperience
* https://get.pixelexperience.org/capricorn
### 砖头
如果刷机过程中出现了黑屏,进不了`recovery``bootloader`时,需要使用`MiFlash`通过串口刷机。
## ADB命令
```
adb devices
adb reboot
adb reboot recovery
adb reboot bootloader
adb pull
adb push
adb shell
adb logcat
adb install
adb uninstall
```
## 刷机命令
注意:注意备份数据
```
fastboot devices
fastboot reboot
fastboot reboot-bootloader
fastboot reboot-recovery
fastboot erase boot
fastboot erase recovery
fastboot erase system
fastboot erase userdata
fastboot erase cache
fastboot flash boot boot.img
fastboot flash recovery recovery.img
fastboot flash system system.img
```

View File

@@ -18,7 +18,6 @@
* 宽带按需`100Mbps/s`(不要固定宽带) * 宽带按需`100Mbps/s`(不要固定宽带)
* 整个下载过程大概需要半到一个小时 * 整个下载过程大概需要半到一个小时
* 整个编译过程大概需要一到两个小时 * 整个编译过程大概需要一到两个小时
* 最痛苦的就是下载回来速度很慢
``` ```
# 编译工具 # 编译工具

View File

@@ -6,7 +6,7 @@ android {
namespace 'com.acgist.client.boot' namespace 'com.acgist.client.boot'
compileSdk 32 compileSdk 32
defaultConfig { defaultConfig {
minSdk 31 minSdk 30
targetSdk 32 targetSdk 32
versionCode 100 versionCode 100
versionName "1.0.0" versionName "1.0.0"

View File

@@ -6,7 +6,7 @@ android {
namespace 'com.acgist.taoyao.client' namespace 'com.acgist.taoyao.client'
compileSdk 32 compileSdk 32
defaultConfig { defaultConfig {
minSdk 31 minSdk 30
targetSdk 32 targetSdk 32
versionCode 100 versionCode 100
versionName "1.0.0" versionName "1.0.0"
@@ -31,9 +31,9 @@ android {
dependencies { dependencies {
implementation project(path: ':boot') implementation project(path: ':boot')
implementation project(path: ':media') implementation project(path: ':media')
implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'com.google.android.material:material:1.5.0' implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3' implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'org.apache.commons:commons-lang3:3.12.0' implementation 'org.apache.commons:commons-lang3:3.12.0'
implementation 'org.apache.commons:commons-collections4:4.4' implementation 'org.apache.commons:commons-collections4:4.4'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2' implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2'

View File

@@ -16,7 +16,8 @@
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true" android:exported="true"
android:label="@string/title_activity_main"> android:label="@string/title_activity_main"
android:theme="@style/Theme.Taoyao">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
@@ -25,7 +26,8 @@
<activity <activity
android:name=".SettingsActivity" android:name=".SettingsActivity"
android:exported="false" android:exported="false"
android:label="@string/title_activity_settings" /> android:label="@string/title_activity_settings"
android:theme="@style/Theme.Taoyao" />
<service <service
android:name=".MediaService" android:name=".MediaService"

View File

@@ -1,8 +1,14 @@
package com.acgist.taoyao.client; package com.acgist.taoyao.client;
import android.app.KeyguardManager;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources;
import android.os.Build;
import android.os.PowerManager;
import android.util.Log;
import android.view.Display;
/** /**
* 开机启动 * 开机启动
@@ -13,11 +19,23 @@ public class BootReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { final Resources resources = context.getResources();
final Intent mainActivity = new Intent(context, MainActivity.class); if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
mainActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if(resources.getBoolean(R.bool.preview)) {
context.startActivity(mainActivity); this.launchPreview(context);
}
} }
} }
/**
* 拉起预览
*
* @param context 上下文
*/
private void launchPreview(Context context) {
final Intent mainActivity = new Intent(context, MainActivity.class);
mainActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startForegroundService(mainActivity);
}
} }

View File

@@ -1,14 +1,17 @@
package com.acgist.taoyao.client; package com.acgist.taoyao.client;
import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.AttributeSet; import android.os.Process;
import android.widget.TextView; import android.os.SystemClock;
import android.util.Log;
import android.view.Display;
import android.view.WindowManager;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import com.acgist.taoyao.client.databinding.ActivityMainBinding; import com.acgist.taoyao.client.databinding.ActivityMainBinding;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
/** /**
* 预览界面 * 预览界面
@@ -20,19 +23,53 @@ public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding; private ActivityMainBinding binding;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle bundle) {
super.onCreate(savedInstanceState); super.onCreate(bundle);
// 媒体服务 // 启动点亮屏幕
final Intent mediaService = new Intent(this, MediaService.class); this.setTurnScreenOn(true);
this.startService(mediaService); // 锁屏显示屏幕
this.setShowWhenLocked(true);
// 设置屏幕常亮
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
// 拉起媒体服务
this.launchMediaService();
// 布局 // 布局
this.binding = ActivityMainBinding.inflate(this.getLayoutInflater()); this.binding = ActivityMainBinding.inflate(this.getLayoutInflater());
this.setContentView(this.binding.getRoot()); this.setContentView(this.binding.getRoot());
// 设置按钮 // 设置按钮
this.binding.settings.setOnClickListener(view -> { this.binding.settings.setOnClickListener(view -> {
final Intent settings = new Intent(this, SettingsActivity.class); final Intent settings = new Intent(this, SettingsActivity.class);
this.startService(settings); this.startActivity(settings);
}); });
} }
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
}
/**
* 拉起媒体服务
*/
private void launchMediaService() {
int times = 0;
final Display display = this.getWindow().getContext().getDisplay();
while(Display.STATE_ON != display.getState() && times++ < 10) {
SystemClock.sleep(100);
}
if(display.STATE_ON == display.getState()) {
// 媒体服务
Log.i(MainActivity.class.getSimpleName(), "拉起媒体服务");
final Intent mediaService = new Intent(this, MediaService.class);
this.startService(mediaService);
} else {
Log.w(MainActivity.class.getSimpleName(), "拉起媒体服务失败");
}
}
} }

View File

@@ -3,6 +3,7 @@ package com.acgist.taoyao.client;
import android.app.Service; import android.app.Service;
import android.content.Intent; import android.content.Intent;
import android.os.IBinder; import android.os.IBinder;
import android.util.Log;
import com.acgist.taoyao.client.signal.Taoyao; import com.acgist.taoyao.client.signal.Taoyao;
@@ -20,6 +21,12 @@ public class MediaService extends Service {
public MediaService() { public MediaService() {
} }
@Override
public void onCreate() {
super.onCreate();
Log.d(MediaService.class.getSimpleName(), "启动媒体服务");
}
@Override @Override
public IBinder onBind(Intent intent) { public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not yet implemented"); throw new UnsupportedOperationException("Not yet implemented");

View File

@@ -1,13 +1,12 @@
package com.acgist.taoyao.client; package com.acgist.taoyao.client;
import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import com.acgist.taoyao.client.databinding.ActivitySettingsBinding; import com.acgist.taoyao.client.databinding.ActivitySettingsBinding;
import com.acgist.taoyao.client.signal.Taoyao;
/** /**
* 设置界面 * 设置界面
@@ -26,12 +25,15 @@ public class SettingsActivity extends AppCompatActivity {
this.setContentView(this.binding.getRoot()); this.setContentView(this.binding.getRoot());
// 设置按钮 // 设置按钮
this.binding.connect.setOnClickListener(view -> { this.binding.connect.setOnClickListener(view -> {
final String port = this.binding.port.getText().toString();
final String name = this.binding.name.getText().toString();
final String host = this.binding.host.getText().toString();
// final Taoyao taoyao = new Taoyao( // final Taoyao taoyao = new Taoyao(
// //
// ); // );
// Log.d(SettingsActivity.class.getSimpleName(), "连接信令:" + taoyao); // Log.d(SettingsActivity.class.getSimpleName(), "连接信令:" + taoyao);
final Intent main = new Intent(this, MainActivity.class); final Intent main = new Intent(this, MainActivity.class);
this.startService(main); this.startActivity(main);
}); });
} }

View File

@@ -11,13 +11,14 @@
android:id="@+id/settings" android:id="@+id/settings"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_marginLeft="16dp"
android:layout_marginBottom="16dp"
android:contentDescription="@string/button_setting" android:contentDescription="@string/button_setting"
android:src="@drawable/settings" android:src="@drawable/settings"
app:borderWidth="16dp" app:borderWidth="16dp"
app:fabSize="normal" app:fabSize="normal"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent" />
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -4,7 +4,8 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/settings" android:id="@+id/settings"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
tools:context="com.acgist.taoyao.client.SettingsActivity">
<EditText <EditText
android:id="@+id/port" android:id="@+id/port"

View File

@@ -1,5 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color> <color name="white">#FFFFFFFF</color>
<color name="black">#FF000000</color>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
</resources> </resources>

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 是否开启预览:关闭预览不会播放视频 -->
<bool name="preview">true</bool>
<string name="version">1.0.0</string>
<integer name="timeout">5000</integer>
<string name="clientType">MOBILE</string>
<string name="algo">DES</string>
<string name="secret">DES</string>
</resources>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.Taoyao" parent="Theme.MaterialComponents.Light.DarkActionBar">
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
</style>
</resources>

View File

@@ -9,7 +9,7 @@ android {
namespace 'com.acgist.mediasoup' namespace 'com.acgist.mediasoup'
compileSdk 32 compileSdk 32
defaultConfig { defaultConfig {
minSdk 31 minSdk 30
targetSdk 32 targetSdk 32
versionCode 100 versionCode 100
versionName "1.0.0" versionName "1.0.0"