mirror of
https://github.com/raysan5/raylib.git
synced 2026-02-03 20:59:18 -05:00
Updated steps
@ -6,15 +6,18 @@ This is simple as in we're just using shell commands, no cmake, no builders of a
|
|||||||
|
|
||||||
## Initial folder setup
|
## Initial folder setup
|
||||||
|
|
||||||
> Note: project.c is copied from raylib/templates/simple_game/simple_game.c
|
> Note: project.c is copied from raylib/examples/examples_template.c
|
||||||
|
|
||||||
/toolchain_arm_api28 put android_toolchain_arm_api28 here
|
|
||||||
/raylib put raylib here
|
/raylib put raylib here
|
||||||
/project1/lib
|
/project1/lib
|
||||||
/project1/obj
|
/project1/obj
|
||||||
/project1/src
|
/project1/src
|
||||||
/project1/dex
|
/project1/dex
|
||||||
/project1/res/values/strings.xml
|
/project1/res/values/strings.xml
|
||||||
|
/project1/res/drawable-hdpi
|
||||||
|
/project1/res/drawable-ldpi
|
||||||
|
/project1/res/drawable-mdpi
|
||||||
|
/project1/res/drawable-xhdpi
|
||||||
/project1/assets
|
/project1/assets
|
||||||
/project1/project.c
|
/project1/project.c
|
||||||
/project1/AndroidManifest.xml
|
/project1/AndroidManifest.xml
|
||||||
@ -46,8 +49,12 @@ This is simple as in we're just using shell commands, no cmake, no builders of a
|
|||||||
<?xml version='1.0' encoding="utf-8" ?>
|
<?xml version='1.0' encoding="utf-8" ?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package='com.seth.project' android:versionCode='0'
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package='com.seth.project' android:versionCode='0'
|
||||||
android:versionName='0' >
|
android:versionName='0' >
|
||||||
<application>
|
<uses-sdk
|
||||||
|
android:minSdkVersion="23"
|
||||||
|
android:targetSdkVersion="30" />
|
||||||
|
<application android:icon="@drawable/icon" android:label="@string/app_name">
|
||||||
<activity android:name="com.seth.project.NativeLoader"
|
<activity android:name="com.seth.project.NativeLoader"
|
||||||
|
android:screenOrientation="landscape"
|
||||||
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
||||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
@ -63,131 +70,122 @@ This is simple as in we're just using shell commands, no cmake, no builders of a
|
|||||||
|
|
||||||
## Outline of the Process
|
## Outline of the Process
|
||||||
|
|
||||||
cp Copy libs from raylib to lib
|
cp Copy libs from raylib to lib and copy icons from raylib/logo to res
|
||||||
gcc Gen native_app_glue.o from raylib
|
clang Gen native_app_glue.o from raylib
|
||||||
ar rcs Gen obj/libnative_app_glue.a from native_app_glue.o
|
llvm-ar rcs Gen obj/libnative_app_glue.a from native_app_glue.o
|
||||||
gcc Gen project.o from project.c
|
clang Gen project.o from project.c
|
||||||
gcc Gen lib/libproject.so from obj/project.o
|
clang Gen lib/libproject.so from obj/project.o
|
||||||
aapt package Gen R.java
|
aapt package Gen R.java
|
||||||
javac Gen classes from R.java and NativeLoader.java
|
javac Gen classes from R.java and NativeLoader.java
|
||||||
dx Gen classes.dex from objects
|
zip Gen zip file from obj directory
|
||||||
|
d8 Gen classes.dex from objects inside zip file (Replaced dx)
|
||||||
|
unzip Extract classes.dex file
|
||||||
|
mv Move classes.dex file to dex directory
|
||||||
aapt package Gen project.unsigned.apk
|
aapt package Gen project.unsigned.apk
|
||||||
aapt add Add shared library to project.unsigned.apk
|
aapt add Add shared library to project.unsigned.apk
|
||||||
keytool Generate keystore
|
keytool Generate keystore
|
||||||
jarsigner Gen project.signed.apk
|
|
||||||
zipalign Align project
|
zipalign Align project
|
||||||
|
apksigner Gen project.apk (Replaced jarsigner)
|
||||||
adb install Install project
|
adb install Install project
|
||||||
adb logcat view log
|
adb logcat view log
|
||||||
|
|
||||||
## Install Standalone Toolchain
|
## Install Standalone Toolchain
|
||||||
|
|
||||||
Install ndk-bundle using Android Studio. Install this in t
|
Install ndk-bundle using Android Studio.
|
||||||
|
|
||||||
~/Library/Android/sdk/ndk-bundle/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-28 --install-dir=./toolchain_arm_api28
|
|
||||||
|
|
||||||
## Install raylib
|
## Install raylib
|
||||||
|
|
||||||
Compile raylib into ./raylib
|
Compile raylib into ./raylib
|
||||||
|
|
||||||
## ~/.bash_profile
|
## ~/.zprofile
|
||||||
|
|
||||||
> Add these files to path so you won't have a big headache later on
|
> Add these files to path so you won't have a big headache later on
|
||||||
|
|
||||||
export ANDROID_SDK_ROOT="/Users/watchmyfeet/Library/Android/sdk"
|
export ANDROID_SDK_ROOT=$HOME/Library/Android/sdk
|
||||||
export PATH="${ANDROID_SDK_ROOT}/build-tools/27.0.3/:$PATH"
|
export PATH=$PATH:$ANDROID_SDK_ROOT/emulator
|
||||||
export PATH="${ANDROID_SDK_ROOT}/tools:$PATH"
|
export PATH=$PATH:$ANDROID_SDK_ROOT/build-tools/36.0.0-rc1
|
||||||
export PATH="${ANDROID_SDK_ROOT}/tools/bin:$PATH"
|
export PATH=$PATH:$ANDROID_SDK_ROOT/tools
|
||||||
export PATH="${ANDROID_SDK_ROOT}/platform-tools:$PATH"
|
export PATH=$PATH:$ANDROID_SDK_ROOT/tools/bin
|
||||||
|
export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools
|
||||||
|
export ANDROID_NDK_ROOT=$ANDROID_SDK_ROOT/ndk/28.0.12674087
|
||||||
|
export PATH=$PATH:$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/darwin-x86_64/bin
|
||||||
|
|
||||||
## Initial Project Setup
|
## Initial Project Setup
|
||||||
|
|
||||||
> Note: Keytool is in java folder on system
|
> Note: Keytool is in java folder on system
|
||||||
|
|
||||||
cd project1
|
cd project1
|
||||||
mkdir lib/armeabi-v7a
|
mkdir lib/arm64-v8a
|
||||||
cp ../raylib/src/libraylib.a lib/armeabi-v7a/libraylib.a
|
cp ../raylib/src/libraylib.a lib/arm64-v8a/libraylib.a
|
||||||
|
cp ../raylib/logo/raylib_72x72.png res/drawable-hdpi/icon.png
|
||||||
|
cp ../raylib/logo/raylib_36x36.png res/drawable-ldpi/icon.png
|
||||||
|
cp ../raylib/logo/raylib_48x48.png res/drawable-mdpi/icon.png
|
||||||
|
cp ../raylib/logo/raylib_96x96.png res/drawable-xhdpi/icon.png
|
||||||
keytool -genkeypair -validity 1000 -dname "CN=seth,O=Android,C=ES" -keystore project.keystore -storepass 'mypass' -keypass 'mypass' -alias projectKey -keyalg RSA
|
keytool -genkeypair -validity 1000 -dname "CN=seth,O=Android,C=ES" -keystore project.keystore -storepass 'mypass' -keypass 'mypass' -alias projectKey -keyalg RSA
|
||||||
|
|
||||||
## Build Script
|
## Build Script
|
||||||
|
|
||||||
> Note: Here's step by step commands which lead to the installation of your project!
|
> Note: Here's step by step commands which lead to the installation of your project!
|
||||||
|
|
||||||
../toolchain_arm_api28/bin/arm-linux-androideabi-gcc -c ../raylib/src/external/android/native_app_glue/android_native_app_glue.c -o obj/native_app_glue.o -std=c99 -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -ffunction-sections -funwind-tables -fstack-protector-strong -fPIC -Wall -Wa,--noexecstack -Wformat -Werror=format-security -no-canonical-prefixes -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__=28
|
aarch64-linux-android29-clang -c ../raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/android_native_app_glue.c -o obj/native_app_glue.o -std=c99 -march=armv8-a -mfix-cortex-a53-835769 -ffunction-sections -funwind-tables -fstack-protector-strong -fPIC -Wall -Wa,--noexecstack -Wformat -Werror=format-security -no-canonical-prefixes -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__=29
|
||||||
|
|
||||||
# Requires: folder setup
|
# Requires: folder setup
|
||||||
# Creates: obj/native_app_glue.o
|
# Creates: obj/native_app_glue.o
|
||||||
# Note: This gcc uses other tools in the same toolchain folder structure, don't even thing about symlinking to it.
|
|
||||||
|
|
||||||
../toolchain_arm_api28/bin/arm-linux-androideabi-ar rcs obj/libnative_app_glue.a obj/native_app_glue.o
|
llvm-ar rcs obj/libnative_app_glue.a obj/native_app_glue.o
|
||||||
|
|
||||||
# Requires: obj/native_app_glue.o
|
# Requires: obj/native_app_glue.o
|
||||||
# Creates: obj/libnative_app_glue.a
|
# Creates: obj/libnative_app_glue.a
|
||||||
|
|
||||||
../toolchain_arm_api28/bin/arm-linux-androideabi-gcc -c project.c -o obj/project.o -I. -I../raylib/src -I../raylib/src/external/android/native_app_glue -std=c99 -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -ffunction-sections -funwind-tables -fstack-protector-strong -fPIC -Wall -Wa,--noexecstack -Wformat -Werror=format-security -no-canonical-prefixes -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__=28 --sysroot=../toolchain_arm_api28/sysroot
|
aarch64-linux-android29-clang -c project.c -o obj/project.o -I. -I../raylib/src -I../raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/ -std=c99 -march=armv8-a -mfix-cortex-a53-835769 -ffunction-sections -funwind-tables -fstack-protector-strong -fPIC -Wall -Wa,--noexecstack -Wformat -Werror=format-security -no-canonical-prefixes -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__=29 --sysroot=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/darwin-x86_64/sysroot
|
||||||
|
|
||||||
# Requires: project.c
|
# Requires: project.c
|
||||||
# Creates: obj/project.o
|
# Creates: obj/project.o
|
||||||
|
|
||||||
../toolchain_arm_api28/bin/arm-linux-androideabi-gcc -o lib/armeabi-v7a/libproject.so obj/project.o -shared -I. -I../raylib/src -I../raylib/src/external/android/native_app_glue -Wl,-soname,libproject.so -Wl,--exclude-libs,libatomic.a -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings -u ANativeActivity_onCreate -L. -Lobj -Llib/armeabi-v7a -lraylib -lnative_app_glue -llog -landroid -lEGL -lGLESv2 -lOpenSLES -latomic -lc -lm -ldl
|
aarch64-linux-android29-clang -o lib/arm64-v8a/libproject.so obj/project.o -shared -I. -I../raylib/src -I../raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity -Wl,-soname,libproject.so -Wl,--exclude-libs,libatomic.a -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings -u ANativeActivity_onCreate -L. -Lobj -Llib/arm64-v8a -lraylib -lnative_app_glue -llog -landroid -lEGL -lGLESv2 -lOpenSLES -latomic -lc -lm -ldl
|
||||||
|
|
||||||
# Requires: obj/project.o
|
# Requires: obj/project.o
|
||||||
# Creates: lib/armeabi-v7a/libproject.so
|
# Creates: lib/arm64-v8a/libproject.so
|
||||||
|
|
||||||
aapt package -f -m -S res -J src -M AndroidManifest.xml -I ${ANDROID_SDK_ROOT}/platforms/android-28/android.jar
|
aapt package -f -m -S res -J src -M AndroidManifest.xml -I ${ANDROID_SDK_ROOT}/platforms/android-29/android.jar
|
||||||
|
|
||||||
# Requires: AndroidManifest.xml, res/
|
# Requires: AndroidManifest.xml, res/
|
||||||
# Creates: src/com/seth/project/R.java
|
# Creates: src/com/seth/project/R.java
|
||||||
|
|
||||||
javac -verbose -source 1.7 -target 1.7 -d obj -bootclasspath `/usr/libexec/java_home`/jre/lib/rt.jar -classpath ${ANDROID_SDK_ROOT}/platforms/android-28/android.jar:obj -sourcepath src src/com/seth/project/R.java src/com/seth/project/NativeLoader.java
|
javac -verbose -source 1.7 -target 1.7 -d obj -bootclasspath `/usr/libexec/java_home`/jre/lib/rt.jar -classpath ${ANDROID_SDK_ROOT}/platforms/android-29/android.jar:obj -sourcepath src src/com/seth/project/R.java src/com/seth/project/NativeLoader.java
|
||||||
|
|
||||||
# Requires: src/com/seth/project/R.java, src/com/seth/project/NativeLoader.java
|
# Requires: src/com/seth/project/R.java, src/com/seth/project/NativeLoader.java
|
||||||
# Creates: obj/com/seth/project/NativeLoader.class ... R&attr.class R$string.class R.class
|
# Creates: obj/com/seth/project/NativeLoader.class ... R&attr.class R$string.class R.class
|
||||||
|
|
||||||
dx --verbose --dex --output=dex/classes.dex obj
|
zip -r obj.zip obj
|
||||||
|
d8 obj.zip --output obj.zip
|
||||||
|
unzip obj.zip
|
||||||
|
mv classes.dex dex/
|
||||||
|
|
||||||
# Requires: obj/com/seth/project/NativeLoader.class ... R&attr.class R$string.class R.class
|
# Requires: obj/com/seth/project/NativeLoader.class ... R&attr.class R$string.class R.class
|
||||||
# Creates: dex/classes.dex
|
# Creates: dex/classes.dex
|
||||||
|
|
||||||
aapt package -f -M AndroidManifest.xml -S res -A assets -I ${ANDROID_SDK_ROOT}/platforms/android-28/android.jar -F project.unsigned.apk dex
|
aapt package -f -M AndroidManifest.xml -S res -A assets -I ${ANDROID_SDK_ROOT}/platforms/android-29/android.jar -F project.unsigned.apk dex
|
||||||
|
|
||||||
# Creates: project.unsigned.apk
|
# Creates: project.unsigned.apk
|
||||||
# Note: The "dex" at the end is the directory the classes.dex file is in! This folder can not contain the manifest file for whatever reason.
|
# Note: The "dex" at the end is the directory the classes.dex file is in! This folder can not contain the manifest file for whatever reason.
|
||||||
|
|
||||||
aapt add project.unsigned.apk lib/armeabi-v7a/libproject.so
|
aapt add project.unsigned.apk lib/arm64-v8a/libproject.so
|
||||||
|
|
||||||
# Does: Adds shared library to apk
|
# Does: Adds shared library to apk
|
||||||
|
|
||||||
jarsigner -keystore project.keystore -storepass mypass -keypass mypass -signedjar project.signed.apk project.unsigned.apk projectKey
|
zipalign -v 4 project.unsigned.apk project.unsigned-align.apk
|
||||||
|
|
||||||
# Does: Signs
|
|
||||||
|
|
||||||
zipalign -f 4 project.signed.apk project.apk
|
|
||||||
|
|
||||||
# Does: Aligns
|
# Does: Aligns
|
||||||
|
|
||||||
|
apksigner sign --ks project.keystore --ks-pass pass:mypass --key-pass pass:mypass --ks-key-alias projectKey --out project.apk project.unsigned-align.apk
|
||||||
|
|
||||||
|
# Does: Signs
|
||||||
|
|
||||||
adb install -r project.apk
|
adb install -r project.apk
|
||||||
|
|
||||||
# Does: install
|
# Does: install
|
||||||
|
|
||||||
## Error: couldn't find libprojectlibrary.so
|
|
||||||
|
|
||||||
You'll get this if your shared library's name does not match across the build. In my case, I was referencing projectlibrary in the java file where it should have just been "project"
|
|
||||||
|
|
||||||
## Error: INSTALL_FAILED_NO_MATCHING_ABIS
|
|
||||||
|
|
||||||
This one was tricky! Make sure the platform of the standalone toolchain you build matches the platform you are using on your system.
|
|
||||||
|
|
||||||
make-standalone-toolchain.sh --arch=arm --platform=android-28 --install-dir=./toolchain_arm_api28
|
|
||||||
${ANDROID_SDK_ROOT}/platforms/android-28
|
|
||||||
|
|
||||||
This command may also help.
|
|
||||||
|
|
||||||
adb shell getprop ro.product.cpu.abi
|
|
||||||
|
|
||||||
## Error: INSTALL_FAILED_DEXOPT
|
|
||||||
|
|
||||||
This one was easier. The Apk generated must contain classes/classes.dex. If it doesn't, check aapt package -f -M to make sure you are including the folder dex is in at the end of it.
|
|
||||||
|
|
||||||
## Dealing with Segmentation Faults - Using adb logcat
|
## Dealing with Segmentation Faults - Using adb logcat
|
||||||
|
|
||||||
In the event of a segfault, don't despair! You can get the entire backtrace using adb logcat.
|
In the event of a segfault, don't despair! You can get the entire backtrace using adb logcat.
|
||||||
|
|||||||
Reference in New Issue
Block a user