finish building test apps
This commit is contained in:
parent
ecd481f5ee
commit
5c918e725e
3 changed files with 113 additions and 45 deletions
17
build.sh
17
build.sh
|
|
@ -1,17 +0,0 @@
|
||||||
javac -classpath ~/Android/Sdk/platforms/android-34/android.jar java/classes/com/example/shadowing/MainActivity.java -d build/
|
|
||||||
d8 --classpath ~/Android/Sdk/platforms/android-34/android.jar build/com/example/shadowing/MainActivity.class --output build/
|
|
||||||
mkdir -p build/apk_files/
|
|
||||||
cp build/classes.dex build/apk_files/
|
|
||||||
~/Android/Sdk/build-tools/34.0.0/aapt package -v -f -M AndroidManifest.xml -I ~/Android/Sdk/platforms/android-34/android.jar -F build/app.apk build/apk_files/
|
|
||||||
# Not working
|
|
||||||
#~/Android/Sdk/build-tools/34.0.0/aapt2 link -v --manifest AndroidManifest.xml -I ~/Android/Sdk/platforms/android-34/android.jar -o build/app.apk build/apk_files/*
|
|
||||||
if [ ! -f build/ToyKey.keystore ]; then
|
|
||||||
keytool -genkeypair -validity 1000 -dname "CN=SomeKey,O=SomeOne,C=FR" -keystore build/ToyKey.keystore -storepass 'P@ssw0rd!' -keypass 'P@ssw0rd!' -alias SignKey -keyalg RSA -v
|
|
||||||
fi
|
|
||||||
~/Android/Sdk/build-tools/34.0.0/zipalign -f 4 build/app.apk build/app.aligned.apk
|
|
||||||
~/Android/Sdk/build-tools/34.0.0/apksigner sign -ks build/ToyKey.keystore --v2-signing-enabled true --in build/app.aligned.apk --out build/app.signed.apk --ks-pass 'pass:P@ssw0rd!'
|
|
||||||
|
|
||||||
#~/Android/Sdk/platform-tools/adb install app.signed.apk
|
|
||||||
#~/Android/Sdk/platform-tools/adb shell am start -n com.example.shadowing/.MainActivity
|
|
||||||
#adb logcat -s SHADOWING
|
|
||||||
#~/Android/Sdk/platform-tools/adb uninstall com.example.shadowing
|
|
||||||
125
flake.nix
125
flake.nix
|
|
@ -57,6 +57,45 @@
|
||||||
cat AndroidManifest.xml | sed 's/PACKAGE/${package}/' | sed 's/NAME/${name}/' > $out/AndroidManifest.xml
|
cat AndroidManifest.xml | sed 's/PACKAGE/${package}/' | sed 's/NAME/${name}/' > $out/AndroidManifest.xml
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
keypass = "P@ssw0rd!";
|
||||||
|
keystore = pkgs.stdenvNoCC.mkDerivation {
|
||||||
|
name = "shadowing.keystore";
|
||||||
|
buildInputs = [ jdk ];
|
||||||
|
phases = ["buildPhase"];
|
||||||
|
buildPhase = ''
|
||||||
|
keytool -genkeypair -validity 1000 -dname "CN=SomeKey,O=SomeOne,C=FR" -keystore $out -storepass '${keypass}' -keypass '${keypass}' -alias SignKey -keyalg RSA -v
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
make-apk = {
|
||||||
|
package,
|
||||||
|
name,
|
||||||
|
classes,
|
||||||
|
} : let
|
||||||
|
manifest = make-manifest package name;
|
||||||
|
in pkgs.stdenvNoCC.mkDerivation {
|
||||||
|
name = "${package}";
|
||||||
|
buildInputs = [ jdk android-env.androidsdk ];
|
||||||
|
phases = ["buildPhase" "installPhase"];
|
||||||
|
buildPhase = ''
|
||||||
|
mkdir -p build/apk_files
|
||||||
|
|
||||||
|
${pkgs.lib.strings.concatMapStringsSep "\n" ( item:
|
||||||
|
"cp ${item.drv} build/apk_files/${item.name}"
|
||||||
|
) classes}
|
||||||
|
|
||||||
|
# link classes.dex not working?
|
||||||
|
# ${build-tools}/aapt2 link -v ---manifest ${manifest}/AndroidManifest.xml -I ${platforms}/android.jar -o build/app.apk build/apk_files/
|
||||||
|
|
||||||
|
${build-tools}/aapt package -v -f -M ${manifest}/AndroidManifest.xml -I ${platforms}/android.jar -F build/app.apk build/apk_files/
|
||||||
|
${build-tools}/zipalign -f 4 build/app.apk build/app.aligned.apk
|
||||||
|
${build-tools}/apksigner sign -ks ${keystore} --v2-signing-enabled true --in build/app.aligned.apk --out build/${package}.apk --ks-pass 'pass:${keypass}'
|
||||||
|
'';
|
||||||
|
installPhase = ''
|
||||||
|
mkdir $out
|
||||||
|
cp build/${package}.apk $out/
|
||||||
|
cp build/${package}.apk.idsig $out/
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
java-classes-main = pkgs.stdenvNoCC.mkDerivation {
|
java-classes-main = pkgs.stdenvNoCC.mkDerivation {
|
||||||
name = "java-class-main";
|
name = "java-class-main";
|
||||||
|
|
@ -89,35 +128,65 @@
|
||||||
dummy-classes-dex = java2dex java-classes-dummy;
|
dummy-classes-dex = java2dex java-classes-dummy;
|
||||||
empty-classes-dex = java2dex java-classes-empty;
|
empty-classes-dex = java2dex java-classes-empty;
|
||||||
|
|
||||||
in rec {
|
in {
|
||||||
|
|
||||||
packages = {
|
packages = rec {
|
||||||
default = let
|
control = make-apk {
|
||||||
manifest = make-manifest "com.example.shadowing.control" "Shadowing C";
|
package = "com.example.shadowing.control";
|
||||||
in pkgs.stdenvNoCC.mkDerivation rec {
|
name = "Shadowing C";
|
||||||
name = "com-example-shadowing.apk";
|
classes = [
|
||||||
srcs = self;
|
{ name = "classes.dex"; drv = main-actual-classes-dex; }
|
||||||
buildInputs = [ jdk android-env.androidsdk pkgs.which ];
|
];
|
||||||
phases = ["unpackPhase" "buildPhase" "installPhase"];
|
};
|
||||||
buildPhase = ''
|
# classes.dex vs classes2.dex
|
||||||
mkdir -p build/apk_files/
|
shdw1 = make-apk {
|
||||||
|
package = "com.example.shadowing.one";
|
||||||
cp ${main-actual-classes-dex} build/apk_files/classes.dex
|
name = "Shadowing 1";
|
||||||
|
classes = [
|
||||||
# link classes.dex not working?
|
{ name = "classes.dex"; drv = main-actual-classes-dex; }
|
||||||
# ${build-tools}/aapt2 link -v ---manifest AndroidManifest.xml -I ${platforms}/android.jar -o build/app.apk build/apk_files/
|
{ name = "classes2.dex"; drv = dummy-classes-dex; }
|
||||||
|
];
|
||||||
${build-tools}/aapt package -v -f -M ${manifest}/AndroidManifest.xml -I ${platforms}/android.jar -F build/app.apk build/apk_files/
|
};
|
||||||
${build-tools}/zipalign -f 4 build/app.apk build/app.aligned.apk
|
# classes2.dex vs classes3.dex
|
||||||
|
shdw2 = make-apk {
|
||||||
keytool -genkeypair -validity 1000 -dname "CN=SomeKey,O=SomeOne,C=FR" -keystore build/ToyKey.keystore -storepass 'P@ssw0rd!' -keypass 'P@ssw0rd!' -alias SignKey -keyalg RSA -v
|
package = "com.example.shadowing.two";
|
||||||
${build-tools}/apksigner sign -ks build/ToyKey.keystore --v2-signing-enabled true --in build/app.aligned.apk --out build/app.signed.apk --ks-pass 'pass:P@ssw0rd!'
|
name = "Shadowing 2";
|
||||||
'';
|
classes = [
|
||||||
installPhase = ''
|
{ name = "classes.dex"; drv = main-classes-dex; }
|
||||||
mkdir $out
|
{ name = "classes2.dex"; drv = actual-classes-dex; }
|
||||||
cp build/app.signed.apk $out/
|
{ name = "classes3.dex"; drv = dummy-classes-dex; }
|
||||||
cp build/app.signed.apk.idsig $out/
|
];
|
||||||
'';
|
};
|
||||||
|
# classes2.dex vs classes1.dex
|
||||||
|
shdw3 = make-apk {
|
||||||
|
package = "com.example.shadowing.three";
|
||||||
|
name = "Shadowing 3";
|
||||||
|
classes = [
|
||||||
|
{ name = "classes.dex"; drv = main-classes-dex; }
|
||||||
|
{ name = "classes1.dex"; drv = dummy-classes-dex; }
|
||||||
|
{ name = "classes2.dex"; drv = actual-classes-dex; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
# classes10.dex vs classes2.dex
|
||||||
|
shdw4 = make-apk {
|
||||||
|
package = "com.example.shadowing.four";
|
||||||
|
name = "Shadowing 4";
|
||||||
|
classes = [
|
||||||
|
{ name = "classes.dex"; drv = main-classes-dex; }
|
||||||
|
{ name = "classes2.dex"; drv = actual-classes-dex; }
|
||||||
|
{ name = "classes3.dex"; drv = empty-classes-dex; }
|
||||||
|
{ name = "classes4.dex"; drv = empty-classes-dex; }
|
||||||
|
{ name = "classes5.dex"; drv = empty-classes-dex; }
|
||||||
|
{ name = "classes6.dex"; drv = empty-classes-dex; }
|
||||||
|
{ name = "classes7.dex"; drv = empty-classes-dex; }
|
||||||
|
{ name = "classes8.dex"; drv = empty-classes-dex; }
|
||||||
|
{ name = "classes9.dex"; drv = empty-classes-dex; }
|
||||||
|
{ name = "classes10.dex"; drv = dummy-classes-dex; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
default = pkgs.symlinkJoin {
|
||||||
|
name = "all-shadowing-apks";
|
||||||
|
paths = [ control shdw1 shdw2 shdw3 shdw4];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
16
test-on-android.sh
Normal file
16
test-on-android.sh
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
APK_FOLDER="./result"
|
||||||
|
|
||||||
|
adb logcat -s SHADOWING &
|
||||||
|
log_pid=$!
|
||||||
|
|
||||||
|
for pkg in $(ls ${APK_FOLDER} | grep '.apk$' | sed 's/.apk$//'); do
|
||||||
|
adb install "${APK_FOLDER}/${pkg}.apk" &> /dev/null
|
||||||
|
sleep 2
|
||||||
|
adb shell am start -n "${pkg}/com.example.shadowing.MainActivity" &> /dev/null
|
||||||
|
sleep 2
|
||||||
|
adb uninstall "${pkg}" &> /dev/null
|
||||||
|
done
|
||||||
|
|
||||||
|
kill "${log_pid}"
|
||||||
Loading…
Add table
Add a link
Reference in a new issue