forked from nickav/android-native-example
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patha.sh
More file actions
executable file
·142 lines (121 loc) · 3.88 KB
/
Copy patha.sh
File metadata and controls
executable file
·142 lines (121 loc) · 3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/bin/bash
APK=NativeExample.apk
[ -z "$ANDROID_NDK" ] && ANDROID_NDK=$HOME/android/ndk
[ -z "$ANDROID_SDK" ] && ANDROID_SDK=$HOME/android/sdk
[ -z "$JAVA_JDK" ] && JAVA_JDK=/usr/lib/jvm/java-8-openjdk
check() {
if [ ! -f "$ANDROID_NDK/ndk-build" ]; then
echo "Android NDK not found in \"$ANDROID_NDK\""
return 1
fi
if [ ! -d "$ANDROID_SDK" ]; then
echo "Android SDK not found in \"$ANDROID_SDK\""
return 1
fi
if [ ! -f "$JAVA_JDK/bin/javac" ]; then
echo "Java JDK not found in \"$JAVA_JDK\""
return 1
fi
if [ ! -f "$ANDROID_SDK/platform-tools/adb" ]; then
echo "Please install Android SDK Platform-tools"
return 1
fi
BUILD_TOOLS=$(ls -t "$ANDROID_SDK/build-tools" | head -1)
if [ ! -f "$ANDROID_SDK/build-tools/$BUILD_TOOLS/aapt" ]; then
echo "Please install Android SDK Build-tools"
return 1
fi
PLATFORM=$(ls -t "$ANDROID_SDK/platforms" | head -1)
if [ ! -f "$ANDROID_SDK/platforms/$PLATFORM/android.jar" ]; then
echo "Please install at least one Android SDK platform"
return 1
fi
return 0
}
get_package_activity() {
PACKAGE=$("$ANDROID_SDK/build-tools/$BUILD_TOOLS/aapt" dump badging bin/$APK | grep "package:" | sed -n "s/package: name='\([^']*\)'.*/\1/p")
ACTIVITY=$("$ANDROID_SDK/build-tools/$BUILD_TOOLS/aapt" dump badging bin/$APK | grep "launchable-activity:" | sed -n "s/launchable-activity: name='\([^']*\)'.*/\1/p")
}
build() {
[ ! -d bin ] && mkdir bin
mkdir -p bin/classes
"$ANDROID_NDK/ndk-build" -j4 NDK_LIBS_OUT=lib/lib || return 1
mkdir -p bin/classes/com/example/NativeExample
mkdir -p bin/src/com/example/NativeExample
cp jni/MainActivity.java bin/src/com/example/NativeExample/
"$JAVA_JDK/bin/javac" -d "bin/classes" -classpath "$ANDROID_SDK/platforms/$PLATFORM/android.jar" bin/src/com/example/NativeExample/MainActivity.java || return 1
"$ANDROID_SDK/build-tools/$BUILD_TOOLS/d8" --no-desugaring --output bin/ bin/classes/com/example/NativeExample/MainActivity.class || return 1
"$ANDROID_SDK/build-tools/$BUILD_TOOLS/aapt" package -f -M AndroidManifest.xml -I "$ANDROID_SDK/platforms/$PLATFORM/android.jar" -A assets -S res -F bin/$APK.build bin lib || return 1
if [ ! -f .keystore ]; then
"$JAVA_JDK/bin/keytool" -genkey -dname "CN=Android Debug, O=Android, C=US" -keystore .keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -validity 30000 || return 1
fi
"$JAVA_JDK/bin/jarsigner" -storepass android -keystore .keystore bin/$APK.build androiddebugkey > /dev/null || return 1
"$ANDROID_SDK/build-tools/$BUILD_TOOLS/zipalign" -f 4 bin/$APK.build bin/$APK || return 1
rm -f bin/$APK.build
return 0
}
remove() {
get_package_activity
"$ANDROID_SDK/platform-tools/adb" uninstall $PACKAGE || return 1
return 0
}
install() {
"$ANDROID_SDK/platform-tools/adb" install -r bin/$APK || return 1
return 0
}
launch() {
get_package_activity
"$ANDROID_SDK/platform-tools/adb" shell am start -n $PACKAGE/$ACTIVITY || return 1
return 0
}
log() {
"$ANDROID_SDK/platform-tools/adb" logcat -d NativeExample:V *:S || return 1
return 0
}
go() {
build || return 1
install || return 1
launch || return 1
return 0
}
run() {
install || return 1
launch || return 1
return 0
}
check || exit 1
case "$1" in
"run")
run
;;
"build")
build
;;
"remove")
remove
;;
"install")
install
;;
"launch")
launch
;;
"log")
log
;;
"")
go
;;
*)
echo "Usage: $0 [command]"
echo "By default build, install and run .apk file."
echo ""
echo "Optional [command] can be:"
echo " run - only install and run .apk file"
echo " build - only build .apk file"
echo " remove - remove installed .apk"
echo " install - only install .apk file on connected device"
echo " launch - ony run already installed .apk file"
echo " log - show logcat"
;;
esac