AStA:デバイス自体でAPKを収集する

AStAとは何ですか? これは、Android上のAndroid Studioの頭字語です。 これは、chroot / Debian、JDK、Android SDK、Gradleを使用してAndroidデバイスでAndroid Studioプロジェクトをビルドする方法です。



なぜこれが必要なのでしょうか? しかし、あなたは理由を決して知りません...それは起こります、例えば、私はいくつかのアイデアをテストしたいのですが、手元にデックストップがありません。 一般的に、誰もが「なぜ」という質問に自分で答えるようにします。



代替手段は何ですか? 既存のソリューションの中で、私は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アプリケーション自体を正常にビルドできたと言いたいです。



All Articles