Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
6ca8db2f
Commit
6ca8db2f
authored
Feb 24, 2019
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Welcome to the 64 bit world!
Close #854
parent
ea129fb2
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
61 additions
and
58 deletions
+61
-58
MagiskInstaller.java
...main/java/com/topjohnwu/magisk/tasks/MagiskInstaller.java
+10
-8
utils.sh
app-core/src/main/res/raw/utils.sh
+1
-0
build.py
build.py
+24
-30
build.gradle
native/build.gradle
+1
-1
Android.mk
native/jni/Android.mk
+11
-6
Application.mk
native/jni/Application.mk
+6
-1
init.cpp
native/jni/core/init.cpp
+6
-12
flash_script.sh
scripts/flash_script.sh
+2
-0
No files found.
app-core/src/main/java/com/topjohnwu/magisk/tasks/MagiskInstaller.java
View file @
6ca8db2f
...
...
@@ -108,7 +108,7 @@ public abstract class MagiskInstaller {
protected
boolean
extractZip
()
{
String
arch
;
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
LOLLIPOP
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
21
)
{
List
<
String
>
abis
=
Arrays
.
asList
(
Build
.
SUPPORTED_ABIS
);
arch
=
abis
.
contains
(
"x86"
)
?
"x86"
:
"arm"
;
}
else
{
...
...
@@ -162,8 +162,6 @@ public abstract class MagiskInstaller {
console
.
add
(
"! Cannot unzip zip"
);
return
false
;
}
Shell
.
sh
(
Utils
.
fmt
(
"chmod -R 755 %s/*; %s/magiskinit -x magisk %s/magisk"
,
installDir
,
installDir
,
installDir
)).
exec
();
return
true
;
}
...
...
@@ -213,14 +211,18 @@ public abstract class MagiskInstaller {
return
false
;
}
// Patch boot image
if
(!
Shell
.
sh
(
Utils
.
fmt
(
"cd %s; KEEPFORCEENCRYPT=%b KEEPVERITY=%b "
+
Shell
.
Job
job
=
Shell
.
sh
(
"cd "
+
installDir
);
if
(
Build
.
VERSION
.
SDK_INT
>=
21
&&
Build
.
SUPPORTED_64_BIT_ABIS
.
length
!=
0
)
{
job
.
add
(
"mv -f magiskinit64 magiskinit 2>/dev/null"
);
}
else
{
job
.
add
(
"rm -f magiskinit64 2>/dev/null"
);
}
if
(!
job
.
add
(
Utils
.
fmt
(
"KEEPFORCEENCRYPT=%b KEEPVERITY=%b "
+
"sh update-binary sh boot_patch.sh %s"
,
installDir
,
Config
.
keepEnc
,
Config
.
keepVerity
,
srcBoot
))
.
to
(
console
,
logs
).
exec
().
isSuccess
())
Config
.
keepEnc
,
Config
.
keepVerity
,
srcBoot
)).
to
(
console
,
logs
).
exec
().
isSuccess
())
return
false
;
Shell
.
Job
job
=
Shell
.
sh
(
"mv bin/busybox busybox"
,
job
=
Shell
.
sh
(
"mv bin/busybox busybox"
,
"rm -rf magisk.apk bin boot.img update-binary"
,
"cd /"
);
...
...
app-core/src/main/res/raw/utils.sh
View file @
6ca8db2f
...
...
@@ -14,6 +14,7 @@ fix_env() {
./busybox
rm
-f
$MAGISKTMP
/busybox/
*
$MAGISKTMP
/mirror/bin/busybox
--install
-s
$MAGISKTMP
/busybox
rm
-f
update-binary magisk.apk
chmod
-R
755
.
cd
/
}
...
...
build.py
View file @
6ca8db2f
...
...
@@ -53,6 +53,7 @@ else:
cpu_count
=
multiprocessing
.
cpu_count
()
gradlew
=
os
.
path
.
join
(
'.'
,
'gradlew.bat'
if
os
.
name
==
'nt'
else
'gradlew'
)
archs
=
[
'armeabi-v7a'
,
'x86'
]
arch64
=
[
'arm64-v8a'
,
'x86_64'
]
keystore
=
'release-key.jks'
config
=
{}
...
...
@@ -99,9 +100,9 @@ def zip_with_msg(zip_file, source, target):
def
collect_binary
():
for
arch
in
archs
:
for
arch
in
archs
+
arch64
:
mkdir_p
(
os
.
path
.
join
(
'native'
,
'out'
,
arch
))
for
bin
in
[
'magisk'
,
'magiskinit'
,
'magiskboot'
,
'busybox'
]:
for
bin
in
[
'magisk'
,
'magiskinit'
,
'magisk
init64'
,
'magisk
boot'
,
'busybox'
]:
source
=
os
.
path
.
join
(
'native'
,
'libs'
,
arch
,
bin
)
target
=
os
.
path
.
join
(
'native'
,
'out'
,
arch
,
bin
)
mv
(
source
,
target
)
...
...
@@ -174,67 +175,60 @@ def gen_update_binary():
return
update_bin
def
run_ndk_build
(
flags
):
proc
=
system
(
f
'{ndk_build} -C native {base_flags} {flags} -j{cpu_count}'
)
if
proc
.
returncode
!=
0
:
error
(
'Build binary failed!'
)
collect_binary
()
def
build_binary
(
args
):
support_targets
=
{
'magisk'
,
'magiskinit'
,
'magiskboot'
,
'busybox'
}
if
args
.
target
:
args
.
target
=
set
(
args
.
target
)
&
support_targets
if
not
args
.
target
:
return
else
:
# If nothing specified, build everything
args
.
target
=
support_targets
# Unsure why this is separate
if
not
args
.
target
:
return
header
(
'* Building binaries: '
+
' '
.
join
(
args
.
target
))
os
.
utime
(
os
.
path
.
join
(
'native'
,
'jni'
,
'include'
,
'flags.h'
))
# Basic flags
global
base_flags
base_flags
=
f
'MAGISK_VERSION={config["version"]} MAGISK_VER_CODE={config["versionCode"]}'
if
not
args
.
release
:
base_flags
+=
' MAGISK_DEBUG=1'
# Magisk is special case as it is a dependency of magiskinit
if
'magisk'
in
args
.
target
:
proc
=
system
(
f
'{ndk_build} -C native {base_flags} B_MAGISK=1 -j{cpu_count}'
)
if
proc
.
returncode
!=
0
:
error
(
'Build Magisk binary failed!'
)
collect_binary
()
run_ndk_build
(
'B_MAGISK=1'
)
# Dump the binary to header
for
arch
in
archs
:
bin_file
=
os
.
path
.
join
(
'native'
,
'out'
,
arch
,
'magisk'
)
with
open
(
os
.
path
.
join
(
'native'
,
'out'
,
arch
,
'binaries_arch.h'
),
'w'
)
as
out
:
with
open
(
bin_file
,
'rb'
)
as
src
:
binary_dump
(
src
,
out
,
'magisk_xz'
)
for
arch
,
arch32
in
list
(
zip
(
arch64
,
archs
)):
bin_file
=
os
.
path
.
join
(
'native'
,
'out'
,
arch
,
'magisk'
)
with
open
(
os
.
path
.
join
(
'native'
,
'out'
,
arch32
,
'binaries_arch64.h'
),
'w'
)
as
out
:
with
open
(
bin_file
,
'rb'
)
as
src
:
binary_dump
(
src
,
out
,
'magisk_xz'
)
# BusyBox is special case as it needs special flags to build
if
'busybox'
in
args
.
target
:
proc
=
system
(
f
'{ndk_build} -C native {base_flags} B_BB=1 -j{cpu_count}'
)
if
proc
.
returncode
!=
0
:
error
(
'Build binaries failed!'
)
collect_binary
()
build
=
False
flags
=
base_flags
run_ndk_build
(
'B_BB=1'
)
if
'magiskinit'
in
args
.
target
:
if
not
os
.
path
.
exists
(
os
.
path
.
join
(
'native'
,
'out'
,
'x86'
,
'binaries_arch.h'
)):
error
(
'Build "magisk" before building "magiskinit"'
)
if
not
os
.
path
.
exists
(
os
.
path
.
join
(
'native'
,
'out'
,
'binaries.h'
)):
error
(
'Build stub APK before building "magiskinit"'
)
flags
+=
' B_INIT=1'
build
=
True
run_ndk_build
(
'B_INIT=1'
)
run_ndk_build
(
'B_INIT64=1'
)
if
'magiskboot'
in
args
.
target
:
flags
+=
' B_BOOT=1'
build
=
True
if
build
:
proc
=
system
(
f
'{ndk_build} -C native {flags} -j{cpu_count}'
)
if
proc
.
returncode
!=
0
:
error
(
'Build binaries failed!'
)
collect_binary
()
run_ndk_build
(
'B_BOOT=1'
)
def
build_apk
(
args
,
flavor
):
...
...
@@ -311,7 +305,7 @@ def zip_main(args):
# Binaries
for
lib_dir
,
zip_dir
in
[(
'armeabi-v7a'
,
'arm'
),
(
'x86'
,
'x86'
)]:
for
binary
in
[
'magiskinit'
,
'magiskboot'
]:
for
binary
in
[
'magiskinit'
,
'magisk
init64'
,
'magisk
boot'
]:
source
=
os
.
path
.
join
(
'native'
,
'out'
,
lib_dir
,
binary
)
target
=
os
.
path
.
join
(
zip_dir
,
binary
)
zip_with_msg
(
zipf
,
source
,
target
)
...
...
native/build.gradle
View file @
6ca8db2f
...
...
@@ -12,7 +12,7 @@ android {
externalNativeBuild
{
ndkBuild
{
// Pass arguments to ndk-build.
arguments
(
'B_MAGISK=1'
,
'B_INIT=1'
,
'B_BOOT=1'
,
arguments
(
'B_MAGISK=1'
,
'B_INIT
64
=1'
,
'B_BOOT=1'
,
'MAGISK_DEBUG=1'
,
'MAGISK_VERSION=debug'
,
'MAGISK_VER_CODE=INT_MAX'
)
}
}
...
...
native/jni/Android.mk
View file @
6ca8db2f
...
...
@@ -19,7 +19,6 @@ LIBUTILS := jni/utils/include
ifdef B_MAGISK
# magisk main binary
include $(CLEAR_VARS)
LOCAL_MODULE := magisk
LOCAL_SHARED_LIBRARIES := libsqlite
...
...
@@ -56,11 +55,19 @@ include $(BUILD_EXECUTABLE)
endif
ifdef B_INIT
# magiskinit
include $(CLEAR_VARS)
ifdef B_INIT
LOCAL_MODULE := magiskinit
BB_INIT := 1
else ifdef B_INIT64
LOCAL_MODULE := magiskinit64
LOCAL_CPPFLAGS += -DUSE_64BIT
BB_INIT := 1
endif
ifdef BB_INIT
LOCAL_STATIC_LIBRARIES := libsepol libxz libutils
LOCAL_C_INCLUDES := \
jni/include \
...
...
@@ -85,7 +92,6 @@ endif
ifdef B_BOOT
# magiskboot
include $(CLEAR_VARS)
LOCAL_MODULE := magiskboot
LOCAL_STATIC_LIBRARIES := libmincrypt liblzma liblz4 libbz2 libfdt libutils
...
...
@@ -116,7 +122,6 @@ endif
ifdef B_BB
# Busybox
include jni/external/busybox/Android.mk
endif
...
...
native/jni/Application.mk
View file @
6ca8db2f
...
...
@@ -9,10 +9,15 @@ ifdef MAGISK_DEBUG
APP_CFLAGS += -D__MDBG
endif
# Build 64 bit binaries for magisk
ifdef B_MAGISK
APP_ABI += arm64-v8a x86_64
endif
# Busybox require some additional settings
ifdef B_BB
APP_CFLAGS := -Os
APP_SHORT_COMMANDS := true
NDK_TOOLCHAIN_VERSION := 4.9
APP_PLATFORM := android-2
2
APP_PLATFORM := android-2
1
endif
native/jni/core/init.cpp
View file @
6ca8db2f
...
...
@@ -44,7 +44,11 @@
#include <flags.h>
#include "binaries.h"
#ifdef USE_64BIT
#include "binaries_arch64.h"
#else
#include "binaries_arch.h"
#endif
#include "magiskrc.h"
#define DEFAULT_DT_DIR "/proc/device-tree/firmware/android"
...
...
@@ -367,12 +371,6 @@ static void setup_init_rc() {
fclose
(
rc
);
}
static
const
char
wrapper
[]
=
"#!/system/bin/sh
\n
"
"unset LD_LIBRARY_PATH
\n
"
"unset LD_PRELOAD
\n
"
"exec /sbin/magisk.bin
\"
${0##*/}
\"
\"
$@
\"\n
"
;
static
void
setup_overlay
()
{
char
buf
[
128
];
int
fd
;
...
...
@@ -402,13 +400,9 @@ static void setup_overlay() {
fd
=
open
(
"/sbin/magiskinit"
,
O_WRONLY
|
O_CREAT
,
0755
);
write
(
fd
,
self
,
self_sz
);
close
(
fd
);
fd
=
open
(
"/sbin/magisk"
,
O_WRONLY
|
O_CREAT
,
0755
);
write
(
fd
,
wrapper
,
sizeof
(
wrapper
));
close
(
fd
);
dump_magisk
(
"/sbin/magisk.bin"
,
0755
);
patch_socket_name
(
"/sbin/magisk.bin"
);
dump_magisk
(
"/sbin/magisk"
,
0755
);
patch_socket_name
(
"/sbin/magisk"
);
setfilecon
(
"/sbin/magisk"
,
"u:object_r:"
SEPOL_FILE_DOMAIN
":s0"
);
setfilecon
(
"/sbin/magisk.bin"
,
"u:object_r:"
SEPOL_FILE_DOMAIN
":s0"
);
setfilecon
(
"/sbin/magiskinit"
,
"u:object_r:"
SEPOL_FILE_DOMAIN
":s0"
);
// Create applet symlinks
...
...
scripts/flash_script.sh
View file @
6ca8db2f
...
...
@@ -100,6 +100,8 @@ $BOOTSIGNED && ui_print "- Boot image is signed with AVB 1.0"
SOURCEDMODE
=
true
cd
$MAGISKBIN
$IS64BIT
&&
mv
-f
magiskinit64 magiskinit
||
rm
-f
magiskinit64
# Source the boot patcher
.
./boot_patch.sh
"
$BOOTIMAGE
"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment