なぜこれが必要なのでしょうか? しかし、あなたは理由を決して知りません...それは起こります、例えば、私はいくつかのアイデアをテストしたいのですが、手元にデックストップがありません。 一般的に、誰もが「なぜ」という質問に自分で答えるようにします。
代替手段は何ですか? 既存のソリューションの中で、私はAIDEしか知りませんが、欠点があります。 第一に、600ルーブルのバージョンをアップグレードするという提案のウィンドウが常に表示されます。これを行わないと、5個を超えるファイルで構成されるプロジェクトを保存できません。 第二に、AIDEは複数のモジュールで構成されるAndroid Studioプロジェクトのアセンブリをサポートしていません。
何が必要ですか?
1. Debian Stretchと互換性のあるAndroidカーネルを備えたデバイス。
2.デバイス上のルート権限の存在。
3. Debianイメージ用のメモリカード上の4 GBの空き容量。
4. Busyboxにプリインストールされています 。
5. Debian on board + adbを使用したデスクトップ(スクリプトを使用してインストールした場合)。
スクリプトによるインストール
次のスクリプトは、debootstrapを使用してDebianイメージを作成し、他のすべての必要なファイルと同様にデバイスのメモリカードに配置してから、デバイス自体でDebian構成スクリプトを実行します。
#!/bin/sh # : sudo echo 'installDebianOnAndroid script started' # ARCH=armhf # Debian DEBIAN_VERSION=stretch # : STORAGE=/sdcard # , : DATA_DRIVE=/Data # FAT32 # (2^32 - 1) BS=1M COUNT=4095 # : dd if=/dev/zero of=$DATA_DRIVE/debianOnAndroid.img bs=$BS count=$COUNT # : mkdir -p ~/debianOnAndroid # : sudo mkfs.ext3 $DATA_DRIVE/debianOnAndroid.img # : sudo mount -o user,loop,exec,dev $DATA_DRIVE/debianOnAndroid.img ~/debianOnAndroid/ # debootstrap debian: sudo debootstrap --verbose --arch $ARCH --foreign $DEBIAN_VERSION ~/debianOnAndroid/ http://ftp.se.debian.org/debian # : sudo umount $DATA_DRIVE/debianOnAndroid.img # : adb push $DATA_DRIVE/debianOnAndroid.img $STORAGE # Busybox : # https://play.google.com/store/apps/details?id=stericson.busybox #adb push busybox/busybox-armv6l /sdcard/busybox #adb shell su -c cp /sdcard/busybox /data/local/busybox #adb shell su -c chmod 755 /data/local/busybox # AStA Android: adb shell mkdir -p $STORAGE/AStA adb shell mkdir -p $STORAGE/AStA/Projects adb shell mkdir -p $STORAGE/AStA/archives adb shell mkdir -p $STORAGE/AStA/scripts # Debian adb push firstMountAndConfigureDebian.sh $STORAGE/AStA/scripts # adb push mountDebian.sh $STORAGE/AStA/scripts adb push umountDebian.sh $STORAGE/AStA/scripts # JDK, Android SDK gradle ANDROID_SDK_TAR_GZ=android-sdk-linux.tar.gz JDK_8_TAR_GZ=jdk-8u144-linux-arm32-vfp-hflt.tar.gz GRADLE_ZIP=gradle-3.5-bin.zip # AStA/archives : adb push archives/$ANDROID_SDK_TAR_GZ $STORAGE/AStA/archives adb push archives/$JDK_8_TAR_GZ $STORAGE/AStA/archives adb push archives/$GRADLE_ZIP $STORAGE/AStA/archives # Gradle: adb push gradleExec.sh $STORAGE/AStA/scripts # Debian: adb shell su -c sh $STORAGE/AStA/scripts/firstMountAndConfigureDebian.sh # : adb shell su -c sh $STORAGE/AStA/scripts/umountDebian.sh # : ASTA_APP_APK=AStA-app.apk # AStA : adb push apk/$ASTA_APP_APK $STORAGE/AStA echo 'installing AStA-app' adb shell pm install -r $STORAGE/AStA/$ASTA_APP_APK echo 'installDebianOnAndroid script done'
デバイス上のDebian構成スクリプト:
echo 'firstMountAndConfigureDebian script started' # SSH: PASSWORD=1234567 # Debian: MNTPT=/data/local/debianOnAndroid # : STORAGE=/sdcard # Debian: IMG_FILE=$STORAGE/debianOnAndroid.img # Debian: DEBIAN_VERSION=stretch # : mkdir -p $MNTPT # : busybox mount -o loop $IMG_FILE $MNTPT # chroot: export PATH=/sbin:/usr/sbin:/bin:/usr/bin:/system/bin:/system/xbin:/su/bin:/su/xbin # debootstrap: chroot $MNTPT /debootstrap/debootstrap --second-stage # apt: echo "deb http://ftp.se.debian.org/debian $DEBIAN_VERSION main contrib non-free" > $MNTPT/etc/apt/sources.list # : busybox mount -t proc none $MNTPT/proc busybox mount -t sysfs none $MNTPT/sys busybox mount -o bind /dev $MNTPT/dev busybox mount -t devpts none $MNTPT/dev/pts export TMPDIR=/tmp #chroot $MNTPT /bin/bash # apt , Internet (3003) chroot $MNTPT sed -i 's#_apt:x:104:65534::/nonexistent:/bin/false#_apt:x:104:3003::/nonexistent:/bin/false#' /etc/passwd # , : chroot $MNTPT apt-get update chroot $MNTPT apt-get --yes upgrade chroot $MNTPT apt-get --yes install ne openssh-server unzip \ android-sdk-build-tools android-sdk-platform-tools # SSH: echo "echo 'root:$PASSWORD' | chpasswd" > $MNTPT/root/setpasswd.sh chroot $MNTPT /bin/sh /root/setpasswd.sh cat $MNTPT/root/setpasswd.sh # SSH, root': chroot $MNTPT sed -i '/PermitRootLogin without-password/c\PermitRootLogin yes' /etc/ssh/sshd_config chroot $MNTPT /etc/init.d/ssh restart # AStA Debian Android: mkdir -p $MNTPT/AStA busybox mount -o bind $STORAGE/AStA $MNTPT/AStA # : ANDROID_SDK_TAR_GZ=android-sdk-linux.tar.gz JDK_8_TAR_GZ=jdk-8u144-linux-arm32-vfp-hflt.tar.gz GRADLE_ZIP=gradle-3.5-bin.zip # : chroot $MNTPT tar -xzvf /AStA/archives/$ANDROID_SDK_TAR_GZ -C /opt chroot $MNTPT tar -xzvf /AStA/archives/$JDK_8_TAR_GZ -C /opt chroot $MNTPT unzip /AStA/archives/$GRADLE_ZIP -d /opt # echo 'firstMountAndConfigureDebian script done'
スクリプトを使用してインストールを実行する
Debianイメージ、アプリケーション、および必要なすべてのスクリプトをデバイスにインストールするには、次の一連のアクションを実行する必要があります。
git clone https://github.com/tabatsky/AStA.git cd AStA/scripts # start.sh sh start.sh
こちらから完成したDebianイメージ(armhfの下)をダウンロードするか、 アプリケーションからダウンロードすることもできます 。
Debianの接続と切断
次のスクリプトは、Debianをマウントしてsshを起動し、Debian上のデバイスからAStAフォルダーもマウントします。
MNTPT=/data/local/debianOnAndroid STORAGE=/sdcard IMG_FILE=$STORAGE/debianOnAndroid.img mkdir -p $MNTPT busybox mount -o loop $IMG_FILE $MNTPT export PATH=/sbin:/usr/sbin:/bin:/usr/bin:/system/bin:/system/xbin:/su/bin:/su/xbin busybox mount -t proc none $MNTPT/proc busybox mount -t sysfs none $MNTPT/sys busybox mount -o bind /dev $MNTPT/dev busybox mount -t devpts none $MNTPT/dev/pts export TMPDIR=/tmp #chroot $MNTPT bash chroot $MNTPT /etc/init.d/ssh start mkdir -p $STORAGE/AStA mkdir -p $MNTPT/AStA busybox mount -o bind $STORAGE/AStA $MNTPT/AStA
これにより、sshが停止し、すべてがアンマウントされます。
MNTPT=/data/local/debianOnAndroid export PATH=/sbin:/usr/sbin:/bin:/usr/bin:/system/bin:/system/xbin:/su/bin:/su/xbin busybox umount $MNTPT/AStA chroot $MNTPT /etc/init.d/ssh stop busybox umount $MNTPT/dev/pts busybox umount $MNTPT/dev busybox umount $MNTPT/proc busybox umount $MNTPT/sys busybox umount $MNTPT
これらのスクリプトはシェルを介して実行できます。
su -c sh /sdcard/AStA/scripts/mountDebian.sh su -c sh /sdcard/AStA/scripts/umountDebian.sh
または、アプリケーションの適切なボタンをクリックするだけです。
Gradleコマンドの実行
sshを介して接続し、次のコマンドを実行して、Gradleビルドを開始できます。
sh /AStA/scripts/gradleExec.sh /AStA/Projects/MyProject/myModule/ myCmd # : sh /AStA/scripts/gradleExec.sh /AStA/Projects/AStA-app/app/ assembleDebug
同様に、目的のコマンド、プロジェクト、モジュールを選択して、アプリケーションのボタンをクリックするだけです。
制限事項
1.「com.android.tools.build:gradle」のバージョンは、プロジェクトのbuild.gradleファイルで指定する必要があります:2.2。*;
2.すべてのモジュールのbuild.gradleファイルで、buildToolsVersion == 24.0.0を示す必要があります。
3.すべてのモジュールのbuild.gradleファイルで、compileSdkVersion <= 24を指定する必要があります。
それがすべてです。
すべてのスクリプトとアプリケーションのソースコードは、次の場所にあります。
github.com/tabatsky/AStA
結論として、この方法でAStA-appアプリケーション自体を正常にビルドできたと言いたいです。