2020年1月15日 星期三

android 9 jni example code

official_android_code_backup/development/samples/SimpleJNI

我曾經在SimpleJNI直接做mm是可以確定cpp被編譯到,
但是如果將此sample code移至vendor/realtek下, 重新rename, 在jni資料夾下,Android.mk故意造成錯誤, 此時編譯是會有報錯, 將Android.mk改回正確, 故意在native.cpp製造錯誤code, 此時卻沒有任何報錯?

如果將Android.mk下的LOCAL_PACKAGE_NAME拿出去搜尋.
./device/realtek/hercules/device.mk:PRODUCT_PACKAGES += RealtekGallery2
並且加入
./device/realtek/hercules/device.mk:PRODUCT_PACKAGES += haha
這時候就會發現native.cpp製造錯誤code的部分被報錯了.

相對應的aosp中的
packages/apps 可以透過find -name jni 找到Android.mk中的LOCAL_PACKAGE_NAME
我以Gallery2作為關鍵字搜尋, 可以在base.mk找到
/device/google/marlin/common/base.mk
此外也可以在此精簡你不必要的apk

但也有可能是因為
Android.mk裡面加入了
LOCAL_PROPRIETARY_MODULE
關閉後就可以編譯到jni的cpp了.
https://source.android.google.cn/devices/architecture/vndk?hl=zh-cn


official_android_code_backup/packages下有不少jni例子, 可以參考


必須先將selinux關閉
setenforce 0
getenforce
https://drive.google.com/file/d/1yTo_MWh_d4RETYLkXPzvbVGU7e8jyro5/view?usp=sharing

也可以由source code中修改
android\system\core\init\selinux.cpp

--- a/system/core/init/selinux.cpp
+++ b/system/core/init/selinux.cpp
@@ -76,7 +76,7 @@ selabel_handle* sehandle = nullptr;
 enum EnforcingStatus { SELINUX_PERMISSIVE, SELINUX_ENFORCING };

 EnforcingStatus StatusFromCmdline() {
-    EnforcingStatus status = SELINUX_ENFORCING;
+    EnforcingStatus status = SELINUX_PERMISSIVE;

     import_kernel_cmdline(false,
                           [&](const std::string& key, const std::string& value, bool in_qemu) {
@@ -85,7 +85,7 @@ EnforcingStatus StatusFromCmdline() {
                               }
                           });

-    return status;
+    return SELINUX_PERMISSIVE;
 }


沒有留言:

張貼留言