লুকানো এবং অভ্যন্তরীণ API গুলি উপলব্ধ সহ আমি কীভাবে Android SDK তৈরি করব?


86

আমি লুকানো এবং অভ্যন্তরীণ API গুলি অন্তর্ভুক্ত করতে অ্যান্ড্রয়েড এসডিকে (বা কেবলমাত্র android.jar) পুনর্নির্মাণ করতে চাই।

এটি সম্পর্কে কীভাবে করা যায় সে সম্পর্কে কোনও ডকুমেন্টেশন বা আলোচনা খুঁজে পাইনি। আমার কাছে ইতিমধ্যে একটি উবুন্টু সায়ানোজেনমড বিল্ড এনভায়রনমেন্ট রয়েছে যা সেমি 7 তৈরি করতে সক্ষম।

এখন, আমি পড়েছি যে মেক এসডিকে এসডিকে তৈরি করবে তবে আমি এমন একটি এসডিকে তৈরি করতে চাই যাতে পদ্ধতি এবং ক্ষেত্রগুলি অন্তর্ভুক্ত থাকে যা @ লুকিয়ে ব্যবহার করে লুকানো হিসাবে চিহ্নিত করা হয়। এটা কি সম্ভব?

আমি যা করতে চাই তা হ'ল লুকানো এপিআই ব্যবহার করে এমন একটি অ্যাপ্লিকেশন পরিবর্তন করা এবং এটি পুনর্নির্মাণের জন্য আমি সংশোধিত এসডিকে ব্যবহার করতে চাই।


4
@ লুকানো কেবল জাভাদোকটি লুকিয়ে রাখে, এই সমস্ত পদ্ধতি এখনও পাওয়া যায়
ব্লুন্ডেল

12
@ লুক তাদের ক্লাস ফাইল থেকে সরান।
টমাস হফম্যান


আমি জানি যে আমি প্রতিবিম্বটি ব্যবহার করতে পারি তবে আমি একটি বিদ্যমান অ্যাপ্লিকেশনটি পরিবর্তন করতে চাই যা রিপ্লেশন ছাড়াই লুকানো এপিআই ব্যবহার করে এবং আমি রিপ্লেশনটি ব্যবহার করার জন্য সমস্ত এক্সটসিং কোড পরিবর্তন করতে চাই না।
থমাস হফম্যান

4
আমি মনে করি আপনি @Hiddenযে API এ অ্যাক্সেস করতে চান তার লেবেলটি সরিয়ে ফেলতে পারেন, তারপরে এক্সিকিউট করতে পারেন make update-apiএবং make SDKনিজের SDK তৈরি করতে পারেন।
স্বপ্নদর্শন

উত্তর:


69

আমি সর্বদা লুকানো এপিআই ব্যবহার করতে এটি করি।

  1. রেপো তৈরি করুন বা এখান থেকে জারগুলি ডাউনলোড করুন Https://sites.google.com/site/hippunosource/home/android/androidnohide-apiwo-shi-yongsuru-ifurekushonha-wei-shi-yong
  2. কপি আউট / টার্গেট / সাধারণ / আপত্তি / জেভিএ_এলআইবিআরআইএস / ফ্রেমওয়ার্ক_ইন্টারমেডিয়েটস / ক্লাসস.জার (ফ্রেমওয়ার্ক_সাল.জারের মতো এটির নামকরণ আরও ভাল)
  3. আপনার প্রকল্প তৈরির পথটি কনফিগার করুন -> গ্রন্থাগারগুলি -> এই বাহ্যিক জারগুলি যুক্ত করুন। অর্ডার এবং এক্সপোর্টে, এন্ড্রয়েড.জারের আগে এবং এটিকে সরান

এটি আমার জন্যও কাজ করেছিল! এখন আমি আসল টাস্কটি নিয়ে যেতে পারি, এর জন্য ধন্যবাদ
কার্লিপল

আইএমএইচও, এটি সবচেয়ে সহজ এবং দ্রুত।
প্যাট্রিক চ

এটিকে যথাযথ উত্তর হিসাবে চিহ্নিত করার উপায় নেই?
ক্রিস ব্রোয়েট

4
এই পদ্ধতিটি কী সমস্ত ডিভাইস নিয়ে কাজ করে, বা এটি কেবল লক্ষ্যযুক্ত ডিভাইসের সাথেই কাজ করে?
হাই ফোং

অ্যান্ড্রয়েড স্টুডিওতে লাইব্রেরির ক্রম সংজ্ঞায়িত করতে, আপনাকে মডিউলটির .imlফাইলটি পরিবর্তন করতে হবে এবং অ্যান্ড্রয়েড এসডিকে এর <orderEntry>আগে আপনার পছন্দসই লাইবস আনতে হবে । দুর্ভাগ্যক্রমে এই কৌশলটি অবিচল নয় কারণ একবার গ্রেড-সিঙ্ক বোতাম টিপলে ফাইলটি ওভাররাইট করা হবে।
ওয়াকসলাম

44

আমি এটি সম্পর্কে কিছু তদন্ত করেছি, এবং আমার উপসংহারটি সহজভাবে: বেশ কিছুটা কাজ না করে এটি করা যায় না। আমি যা পেয়েছি তার বিশদ জন্য এই উত্তরটির বাকী অংশটি পড়ুন।


android.jarআসলে "পাবলিক এপিআই" এর সমন্বয়ে গঠিত framework.jarএবং core.jarযা system/frameworks/ডিভাইসে পাওয়া যায় । android.jarআমি জাভা লাইব্রেরির শিরোনামকে যা বলব তার মধ্যে এটি এক ধরণের, আসল বাইট কোডের সমস্ত বাস্তবায়ন কেবল একটি throw new RuntimeException("stub");, এটি আপনাকে বিরুদ্ধে তুলতে দেয় android.jar(উদাহরণস্বরূপ Eclipse এ), তবে মৃত্যুদন্ড কার্যকর করতে একটি ডিভাইস বা এমুলেটরটিতে সঞ্চালন করতে হয়।

অ্যান্ড্রয়েড SDK এর প্রকাশ্য API দ্বারা শ্রেণীর / পদ্ধতি / ক্ষেত্র হয় সংজ্ঞায়িত করা হয় না সঙ্গে পূর্বে সমাধান @{hide}javadoc টীকা। অর্থাত এনটোট করা হয় না এমন সমস্ত কিছু এসডিকে অন্তর্ভুক্ত।

android.jarঅবস্থিত উত্সগুলি থেকে তৈরি করা হয়েছে out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediatesযেখানে নিজেই অবস্থিত DroidDoc সরঞ্জাম দ্বারা উত্পাদিত হয়েছে build/tools/droiddoc

ড্রয়েডোক হ'ল সেই সরঞ্জাম (সম্ভবত জাভাদোক থেকে অভিযোজিত, বা জাভাদোক ব্যবহার করে) যা প্রকৃত অ্যান্ড্রয়েড এসডিকে ডকুমেন্টেশন তৈরি করে। পার্শ্ব-প্রতিক্রিয়া হিসাবে এবং সম্ভবত এটি ইতিমধ্যে সমস্ত জাভাডোককে পার্স করছে তাই এটি অ্যান্ড্রয়েড স্টাবগুলিও খুঁজে বের করে android.jarযা এসডিকে বিতরণ করা হয় যা পরে সংকলিত হয় ।

সুতরাং যে গোপনীয় জিনিসগুলি আপনি রাখতে পারেন তা অন্তর্ভুক্ত করতে যদি আপনি কেবল নির্দিষ্ট অংশগুলি অন্তর্ভুক্ত করতে চান তবে কেবল @hideটীকাটি সরিয়ে এসডিকে পুনর্নির্মাণ করুন।

তবে আপনি যদি সমস্ত লুকানো অংশগুলি অন্তর্ভুক্ত করতে চান তবে জিনিসগুলি আরও জটিল হয়ে উঠবে। আপনি DroidDoc (প্রাসঙ্গিক উত্সটি অন্তর্ভুক্ত build/tools/droiddoc/src/Stubs.java) পরিবর্তন করতে পারেন যাতে কোনও কিছুই গোপন হিসাবে সনাক্ত করা যায় না। এটি বেশ তুচ্ছ এবং আমি এটি চেষ্টা করেছি, তবে যে স্টাবগুলি উত্পন্ন হয় তা মোটেই সংকলন করে না।

এখনই আমার উপসংহারটি হ'ল এটি কেবল সম্ভব নয়। আপনি যদি DroidDoc এর যে অংশটি গোপন টীকাগুলি সনাক্ত করেন, সরিয়ে ফেলেন তবে উত্পন্ন স্টাবগুলি কেবল সংকলনযোগ্য নয় এবং সঠিকভাবে সংকলন করতে বেশ খানিকটা কাজের প্রয়োজন হবে।

সুতরাং আপনার প্রশ্নের আমার উত্তর হ'ল: না, অনেক কাজ না করেই এটি করা যায় না। দুঃখিত


mkstubsসরঞ্জাম সম্পর্কে একটি পাশ নোট । mkstubsআপনি যখন কোনও এসডিকে অ্যাডোন তৈরি করেন , অর্থাত্‍ বিক্রেতাদের কাছ থেকে আপনি অ্যান্ড্রয়েড এসডিকে ম্যানেজারে খুঁজে পেতে পারেন এমন অ্যাডনগুলি উদাহরণস্বরূপ স্যামসুং আপনাকে স্যামসুং ফোনগুলিতে নির্দিষ্ট স্টাফের জন্য একটি অতিরিক্ত এপিআই সরবরাহ করে। mkstubsড্রয়েডক স্টাবস জেনারেশন প্রক্রিয়ার মতোই কাজ করে, তবে এটি @hideটীকা ব্যবহার করে না , এটিতে একটি .defsফাইল ব্যবহার করা হয় যা আপনার এসডিকে অ্যাডোন থেকে কোন প্যাকেজ / শ্রেণি / ক্ষেত্রগুলি অন্তর্ভুক্ত বা বাদ দিতে পারে তা বর্ণনা করে।

তবে এগুলি সমস্ত প্রশ্নের সাথে অপ্রাসঙ্গিক, কারণ অ্যান্ড্রয়েড এসডিকে বিল্ডটি সরঞ্জামটি ব্যবহার করে নাmkstubs । (দুর্ভাগ্যক্রমে।)


আমারও এক নজর ছিল। দ্রোডোকের পাশাপাশি / বিকাশ / সরঞ্জাম / এমকেস্টাবগুলিতে এমকেস্টাবস নামে একটি সরঞ্জাম রয়েছে। এটি বিল্ড চলাকালীন কল হবে এবং যতদূর আমি দেখেছি এটি ক্লাস ফাইলগুলি স্টাবিং স্টাফগুলির মধ্যে পরিবর্তন করবে। বিল্ড / কোর / টাস্কস / এসডিকে- এডডন.এমকে তে নিম্নলিখিত কোড রয়েছে: স্টাব-অ্যাডন-জার def সংজ্ঞায়িত করুন (স্টাব-অ্যাডন-জার-ফাইল কল করুন, $ (1)): $ (1) | mkstubs $ (St (PRODUCT_SDK_ADDON_STUB_DEFS) ব্যবহার করে তথ্য স্টুবিং অ্যাডন জার) $ (আড়াল) জাভা-জার $ (মডিউল-ইনস্টল-ফাইলগুলি, mkstubs) $ (যদি $ (আড়াল করুন), - ভি) \ "$$ <" "$$ @" @ $ (PRODUCT_SDK_ADDON_STUB_DEFS) এন্ডেফ
থমাস হফম্যান

দুর্ভাগ্যক্রমে, আমি এই স্টাফের মধ্যে নই তবে আমার কাছে দেখে মনে হচ্ছে এটি সমস্তই লুকানো পরিবর্তকের উপর নির্ভর করে। যদিও এটি সেট হয়ে যায় আমি খুঁজে পাইনি। আপনি যদি অন্য বিল্ড ফাইলগুলিতে $ (লুকিয়ে রাখেন) অনুসন্ধান করেন তবে দেখতে পাবেন যে অনেক কিছুই এই মানের উপর নির্ভর করে। এটি সি লিবগুলি যেভাবে নির্মিত তা প্রভাবিত করে বলে মনে হয়।
থমাস হফম্যান

@ থমাসহফম্যান: আমি প্রথমদিকে এমকেস্টাবস সরঞ্জামটি দ্বারা বিভ্রান্ত হয়ে পড়েছিলাম। আমি যা শিখেছি তা হ'ল এমকেস্টাবগুলি কেবল তখনই ব্যবহার করা হয় যখন আপনি কোনও (বিক্রেতার) এসডিকে অ্যাডন তৈরি করছেন, যখন আপনি কেবলমাত্র সাধারণ এসডিকে তৈরি করেন না। তবে, এম কেস্টাবগুলি ড্রয়েডডকের মতোই একই কাজ করে @hide, এটি টীকাগুলি ব্যবহার না করে এটি "স্রেফ" অ্যাডনের .defsAPI এ অন্তর্ভুক্ত কোন প্যাকেজ / শ্রেণি / ক্ষেত্রগুলিকে অন্তর্ভুক্ত করতে হবে তা বর্ণনা করে এমন একটি ফাইল ব্যবহার করে ।
বজার্ক ফ্রুন্ড-হানসেন

4
@ থমাস হাফম্যান: প্রায় $(hide), আপনি নিজেকে বিভ্রান্ত করছেন। $(hide)প্রোগ্রামটির প্রকৃত কমান্ড-লাইনটি কার্যকর করার জন্য লুকানোর জন্য কেবল মেকফিলগুলির একটি উপসর্গ, এর চেয়ে বেশি কিছুই নয় এবং এটি সর্বত্র সর্বত্রই ব্যবহৃত হয়। এটির অ্যান্ড্রয়েড এসডিকে বা @hideউত্স কোডটিতে টীকা দেওয়ার সাথে কিছুই করার নেই ।
বার্জার ফ্রেইন্ড-হানসেন

আমি কীভাবে এই উপরের পাথ / টার্গেট / সাধারণ / আপত্তি / জাভা-এলবিআরারি / ফ্রেমওয়ার্ক_ইন্টারমিডিয়েটস / ক্লাসস.জার
বনি

31

আমরা অ্যান্ড্রয়েড প্ল্যাটফর্ম থেকে * .jar ফাইলগুলি পুনর্গঠন করতে পারি।

প্রথমে আপনার ডিভাইসে এডিবি সংযুক্ত করুন। তারপরে চালান:

adb pull /system/framework/core.jar .
adb pull /system/framework/framework.jar .

core.jarমান জাভা লাইব্রেরি ধারণ ( java.*) এবং framework.jar(অ্যান্ড্রয়েড লাইব্রেরি থাকতে android.*)। এটি এখনও ব্যবহারযোগ্য নয়, কারণ আসল ফাইলগুলি ডেক্স বিন্যাসে রয়েছে, জেআর ফর্ম্যাট নয়।

আমরা এই ডেক্স-ফর্ম্যাটেড *। জারগুলিকে ডেক্স 2 বাজারের মতো সরঞ্জাম ব্যবহার করে বাস্তব জারগুলিতে রূপান্তর করতে পারি :

dex2jar core.jar
dex2jar framework.jar

তারপরে "বহিরাগত জারগুলি যুক্ত করুন ..." ব্যবহার করে এই বয়ামগুলিতে টানুন (ধরে নিবেন আপনি Eclipse ADT ব্যবহার করছেন)

  • উপর ক্লিক করুন Project → Properties → Java Build Path → Libraries → Add External JARs... → ( উপরের থেকে core-dex2jar.jarএবং চয়ন করুন framework-dex2jar.jar)

এটি আপনাকে অভ্যন্তরীণ এবং কিছু জাভা 7 এপিআই ব্যবহার করতে সক্ষম করবে। (উত্পন্ন APK, যতদূর আমি দেখতে পাচ্ছি, জেআরএস থেকে কোনও আসল কোড নেই))


আপনাকে অনেক ধন্যবাদ, আমি অনেকগুলি উপায় চেষ্টা করেছি কেবলমাত্র আপনার পদ্ধতিগুলি আমার জন্য কাজ করে।
সালুটনমন্ডো

7
এটি লক্ষ করা গুরুত্বপূর্ণ যে এই পদ্ধতিটি এখনও আইসিএস এবং পরবর্তী সিস্টেমগুলির সাথে কাজ করে তবে আরও কিছু জাগলিং দরকার। প্রাসঙ্গিক ফাইল /system/framework/core.odex, /system/framework/framework.odexএবং সম্ভবত আরও অনেক কিছু। এগুলি ডিওডেক্সড ( java -jar baksmali-2.0.3.jar -d system.framework -x system.framework/core.odex -o core) এবং পুনঃডেক্সড ( java -jar smali-2.0.3.jar -x -o core.dex core) করা যেতে পারে এবং কেবল dex2jar core.dexতার পরে এটির কাজ করে।
অ্যালেক্স কোহন

মার্শমেলোতে কোর.জার সন্ধান করতে অক্ষম
mehmet6parmak

আপনার কি অ্যান্ড্রয়েড পি-তে কোর এবং ফ্রেমওয়ার্ক জারের জন্য কোনও ধারণা আছে?
প্রভাকরণ

আমি কীভাবে এই উপরের পাথ / টার্গেট / সাধারণ / আপত্তি / জাভা-এলবিআরারি / ফ্রেমওয়ার্ক_ইন্টারমিডিয়েটস / ক্লাসস.জার
বনি

18

আপনি এই সংগ্রহস্থলandroid.jar থেকে লুকানো এপিআই হিসাবে ব্যবহার করতে সংশোধিত ডাউনলোড করতে পারেন । সেখানে নির্দেশাবলী অনুসরণ করুন।


4
এই উত্তরটি আরও উত্সাহিত করা উচিত কারণ এটি সহজ সমাধান। লোকেরা, আপনি যদি কোনও সমাধান খুঁজছেন - জেনে রাখুন যে অন্যান্য লোকেরা ইতিমধ্যে এটি করেছে এবং সেই গিথুব রেপোতে একটি সমাধান রেখেছিল placed এটি ব্যবহার করুন এবং উপভোগ করুন! ))
মিকাজ

4
এপিডির 28 এর জন্য android.jar ব্যবহার করার সময় আমি রোবलेक्ट্রিকের সাথে একটি ত্রুটি পাচ্ছি। Github.com/anggrayudi/android-hided-api/issues/62 একটি ইস্যু উত্থাপন করেছে এবং আপনার জার @ অংগ্রায়ুদি জন্য আপনাকে ধন্যবাদ
প্রভাকরণ

অ্যান্ড্রয়েড 10 এর জন্যও আমি একই কাজ করেছি এটি আমার পক্ষে কাজ করে না বরং আমি অন্যান্য অবদানকারী github.com/aeab13/android-jar-with-hided-api থেকে ডাউনলোড করেছিলাম । আমি এক্সেস HDMI-সিইসি বর্গ করতে সক্ষম হন এবং এটি নির্মাণ কিন্তু তখনও কোড .code লিংক বিভ্রান্তিকর হয় android.googlesource.com/platform/frameworks/base/+/4e90fcd/...
tandukar babbin

17

ললিপপের জন্য প্রবাহ কিছুটা পৃথক:

  1. ললিপপ ডিভাইস থেকে / সিস্টেমে / ফ্রেমওয়ার্ক / আর্ম / বুট.ওট পান

  2. 'Java -jar oat2dex.jar বুট boot.oat' ব্যবহার করুন

  3. আপনি দুটি ফোল্ডার পাবেন: ডেক্স এবং ওডেক্স। ডেক্সে যান এবং 'জাভা -জার ডেক্স 2 জার.জার ফ্রেমওয়ার্ক.ডেক্স' করুন
  4. আপনার প্রয়োজনীয় ক্লাসগুলি .zip, এক্সট্রাক্ট এবং সন্ধান করতে ফলাফলের ফ্রেমওয়ার্কের নামকরণ করুন
  5. [Sdk_path] / প্ল্যাটফর্ম / [টার্গেট_প্ল্যাটফর্ম] এ যান এবং অ্যান্ড্রয়েড.জার বের করুন (প্রথমে এটি জিপটির নাম পরিবর্তন করুন)।
  6. এক্সট্রাক্ট ফ্রেমওয়ার্ক থেকে অ্যান্ড্রয়েড.জার্ভে ফাইলগুলি অনুলিপি করুন। তারপরে জিপকে সংকুচিত করুন এবং .জার নামকরণ করুন:

PS: সম্ভবত 'ফ্রেমওয়ার্ক_ক্ল্যাশস 2.ডেক্স' এর জন্য আপনার 4-6 বার পুনরাবৃত্তি করতে হবে


৩ য় পদক্ষেপের জন্য, আমি এই লিঙ্কটিতে ডেক্স 2জার.জারটি খুঁজে পাই না .... আমি অনেক কিছু চেষ্টা করেছি এবং আমি এটি বের করতে পারি না। কোথাও এর কোনও যোগসূত্র আছে? এটি কি আমার অ্যান্ড্রয়েড এসডিকে অবস্থিত? আমি এটি খুঁজে পাচ্ছি না।
ডাব্বিট্রন

হ্যাঁ, এটি একটি গিথুব প্রকল্পে যায়, এবং সম্ভবত এটি আমিই কিন্তু সেখানে কোনও ফাইল ".jar" এ শেষ হতে পারে না ...
ডাব্বেট্রন

4
'রিলিজ' বিভাগে দেখুন
বিপথগামী

4
সুতরাং দেখে মনে হচ্ছে ডেক্স 2জারের সাম্প্রতিক সংস্করণগুলি ডাউনলোডের ফর্ম্যাট পরিবর্তন করেছে। কেবল ডাউনলোডটি আনজিপ করুন এবং 'জাভা-জার ... এর পরিবর্তে' আপনার ডিভাইসটির উপর নির্ভর করে 'd2j-dex2jar.sh' বা 'd2j-dex2jar.bat' স্ক্রিপ্টটি সরাসরি ফ্রেমওয়ার্ক.ডেক্স ফাইলে
চালান

4
আমি উভয় জার-ফাইলগুলি অ্যান্ড্রয়েড.জারে অনুলিপি করেছি, এখন অ্যান্ড্রয়েড স্টুডিও আমাকে ত্রুটি বলেছে: টাস্কের জন্য এক্সিকিউশন ব্যর্থ হয়েছে ': অ্যাপ: প্রসেসডিজব্রিজোর্সেস'। > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: প্রক্রিয়া 'কমান্ড' ডি: \ প্রোগ্রাম \ অ্যান্ড্রয়েড \ android-sdk d বিল্ড-সরঞ্জাম \ 19.1.0 \ aapt.exe ' 'শূন্য-বহির্গমন মান 1 দিয়ে শেষ হয়েছে
wutzebaer

15

DroidCon 2011

এখানে সনি এরিকসন থেকে আসা এরিক হেলম্যান কীভাবে গোপন অ্যান্ড্রয়েড এপিআইয়ের অ্যাক্সেস করবেন তা ব্যাখ্যা করে:

http://vimeo.com/30180393 (হুম লিঙ্কটি কাজ করতে দেখা যায় না)।

এতে যান DroidCon ওয়েবপেজ দিন 2 থেকে নীচে স্ক্রোল করুন লুকায়িত API গুলি 10:15 ব্যবহার এবং আপনি এটি সেখানে দেখতে পারেন।

লিঙ্কগুলি মারা যাচ্ছে!

আমি এটি পেয়েছি: http://skillsmatter.com/podcast/os-mobile-server/hided-api dnono কতক্ষণ পর্যন্ত এটি চলবে

অ্যান্ড্রয়েড এসডিকে আনুষ্ঠানিক এপিআইগুলি সাধারণত বেশিরভাগ সাধারণ অ্যাপ্লিকেশনগুলির জন্য পর্যাপ্ত। তবে, কখনও কখনও এমন পরিস্থিতিতে থাকে যখন কোনও বিকাশকারীকে অভ্যন্তরীণ সিস্টেম পরিষেবাগুলি, API গুলি এবং অফিশিয়াল এপিআইগুলিতে প্রকাশিত হয় না এমন সংস্থানগুলিতে অ্যাক্সেসের প্রয়োজন হয়। ভাগ্যক্রমে, এই এপিআইগুলি এখনও কিছু চালাক কৌশল দ্বারা উপলব্ধ এবং অ্যান্ড্রয়েডের শীর্ষে নতুন এবং উদ্ভাবনী সমাধান বিকাশ করার সময় প্রায়শই কার্যকর হতে পারে। এই অধিবেশনে আপনি কীভাবে এই গোপন এবং সুরক্ষিত API গুলি অ্যাক্সেস এবং ব্যবহার করতে পারবেন, সেগুলির ব্যবহারের সীমাবদ্ধতা এবং একাধিক বিক্রেতাদের ডিভাইস এবং অ্যান্ড্রয়েড সংস্করণগুলিতে নিরাপদ এবং নিয়ন্ত্রণ পদ্ধতিতে কীভাবে সেগুলি ব্যবহার করবেন সে সম্পর্কে কিছু টিপস-কৌশল নয়। শ্রোতারা বেশ কয়েকটি উন্নত ডেমো দেখতে পাবেন যা আপনি সাধারণত অ্যান্ড্রয়েড দিয়ে করতে পারবেন না। অ্যান্ড্রয়েড প্ল্যাটফর্মের ইন্টার্নালগুলিতে প্রচুর অন্তর্দৃষ্টি সহ মোটামুটি উন্নত অধিবেশনটির প্রত্যাশা করুন।


4
এটি আকর্ষণীয় তবে দুর্ভাগ্যক্রমে এটি আমার প্রশ্নের উত্তর দেয় না। আমি লুকিয়ে থাকা জিনিসগুলি সহ এসডিকে পুনর্নির্মাণের উপায় চাইছিলাম।
টমাস হাফম্যান 21

দেখে মনে হচ্ছে আমি যা চাই তা অর্জন করার জন্য আমি অন্য কোনও উপায় খুঁজে পেয়েছি। আমি আগামীকাল এটি বর্ণনা করব।
থমাস হফম্যান

আমি খুঁজে পেয়েছি যে আপনি যদি এমন প্রকল্পের উত্স সংকলন করতে চান যা ADT এর মধ্যে লুকানো API ব্যবহার করে তবে আপনি নিম্নলিখিতটি করতে পারেন: 1) উত্সটির জন্য একটি Android প্রকল্প তৈরি করুন। 2) বিল্ড পাথ থেকে অ্যান্ড্রয়েড ক্লাসপাথ ধারক সরান 3) কোনও ব্যবহারকারী গ্রন্থাগার সংজ্ঞায়িত করুন (সিস্টেম লাইব্রেরি চেকবক্সও পরীক্ষা করুন) যাতে একটি এসওপি রম বিল্ড থেকে জার ফাইল অন্তর্ভুক্ত থাকে, যেমন সেমি 7)। আপনি কোন JAR ফাইলগুলি ব্যবহার করেন তা নির্ভর করে আপনার কীসের রেফারেন্স করতে হবে। কাঠামো-নকলগুলি সম্ভবত এটির অংশ হবে।
থমাস হফম্যান

4) যখন প্রকল্পটি তৈরি করা হয় তখন ব্যবহারকারী লাইব্রেরি ক্লাসগুলি তৈরি করা APK তে অন্তর্ভুক্ত হবে না। লুকানো এপিআই দৃশ্যমান এবং সবকিছু ঠিকঠাক সংকলন করবে।
থমাস হফম্যান

@ ব্লুন্ডেল: আপনি দয়া করে লিঙ্কগুলি আপডেট করতে পারেন .. সেগুলি মারা গেছে!
জম্বি

12

তাকান করার চেষ্টা করুন এই :

এই নিবন্ধগুলির চূড়ান্ত লক্ষ্য হ'ল ডেভেলপারদের প্রতিবিম্ব ব্যবহার না করে অভ্যন্তরীণ এবং লুকানো এপিআইয়ের শক্তি দেওয়া। আপনি যদি পরবর্তী কয়েকটি অংশে বর্ণিত সমস্ত পদক্ষেপগুলি সম্পূর্ণ করেন তবে আপনি অভ্যন্তরীণ এবং লুকানো এপিআইগুলি ব্যবহার করতে সক্ষম হবেন যেন সেগুলি সর্বজনীন উন্মুক্ত APIs। প্রতিবিম্বের প্রয়োজন হবে না।

তবে আপনি যদি এই অ-সর্বজনীন এপিআইগুলি ব্যবহার করেন তবে আপনার সচেতন হওয়া উচিত যে আপনার অ্যাপ্লিকেশনটি খুব ঝুঁকিতে রয়েছে। মূলত এমন কোনও গ্যারান্টি নেই যে অ্যান্ড্রয়েড ওএসের পরবর্তী আপডেটের সাথে এপিআইগুলি ভঙ্গ হবে না। এমনকি বিভিন্ন বিক্রেতাদের ডিভাইস জুড়ে সামঞ্জস্যপূর্ণ আচরণ সম্পর্কে কোনও গ্যারান্টি নেই। আপনি সম্পূর্ণ নিজের উপর।

আপনি অনুসরণ করতে পারেন এমন তিনটি পরিস্থিতি রয়েছে:

  1. উভয় অভ্যন্তরীণ এবং লুকানো APIs সক্ষম করুন (দৃশ্য এ)
  2. কেবল লুকানো এপিআই সক্ষম করুন (দৃশ্য বি)
  3. কেবলমাত্র অভ্যন্তরীণ এপিআই সক্ষম করুন (দৃশ্য সি)

পরিস্থিতি A হ'ল বি এবং সি এর যোগফল পরিস্থিতি বিটি সবচেয়ে সহজ (কোনও গ্রহণের জন্য এডিটি প্লাগইন পরিবর্তনের দরকার নেই)।

পরিস্থিতি এ : অংশ 1 পড়ুন , 2 , 3 , 4 , 5 পড়ুন

পরিস্থিতি বি : অংশ 1 পড়ুন , 2 , 3 , 5 পড়ুন

পরিস্থিতি সি : অংশ 1 , 2 , 3 , 4 , 5 পড়ুন


4
আমি ইতিমধ্যে ব্লগ এন্ট্রি পড়েছি। এটির উল্লেখ রয়েছে: "১) অ্যান্ড্রয়েড একটি ওপেন সোর্স প্রকল্প We দুর্ভাগ্যক্রমে, এটি বিশদে যায় না।
টমাস হফম্যান

4
ব্লগ পোস্টের সর্বশেষ অংশে যান ( devmaze.wordpress.com/2011/01/19/… ), প্রাক-বিল্ট অ্যান্ড্রয়েডের জন্য একটি লিঙ্ক আছে ( github.com/inजारuk / android - sdk / tree / master / platforms ) সমস্ত লুকানো এবং অভ্যন্তরীণ এপিআই সহ API গুলি।
বব

4
প্রদত্ত লিঙ্কগুলি অ্যাক্সেসযোগ্য নয়, লেখকের অনুমতি দরকার
শাহ

আমি কীভাবে এই উপরের পাথ / টার্গেট / সাধারণ / আপত্তি / জাভা_লিবারি / ফ্রেমওয়ার্ক_ইন্টারমিডিয়েটস / ক্লাস.জার আউট চেক করতে পারি
বনি

1

আমি একবার http://source.android.com/ এর একটি রেপো চেকআউট থেকে জাভা ফাইলগুলি বের করার জন্য কিছু গ্রোভি স্ক্রিপ্ট লিখেছিলাম s এবং তারপরে প্রয়োজনীয় অন্যান্য পদক্ষেপগুলি সহ সমস্ত অ্যান্ড্রয়েড উত্স সংকলনের জন্য একটি পূর্ণ সরঞ্জামচেনের প্রয়োজন ছাড়াই তাদের সংকলন করেছি ( প্যাকেজিং, উত্পন্ন উত্স ইত্যাদি)।

সেগুলি এখানে পাওয়া যাবে:

https://github.com/thoutbeckers/ CollectAndroid

তবে অবশ্যই এটির জন্য জিঞ্জারব্রেডের পরে কোনও কিছুর জন্য আপডেট করার প্রয়োজন হবে, বেশিরভাগ ক্ষেত্রে কনফিগার ফাইলে ("কালেক্টকনফিগ.groovy)" "রুটডিয়ার্স" এ সঠিক ডিরেক্টরিগুলি সেট করে।

যে সময় আমি নিয়মিত এটি উপলব্ধ সমস্ত লুকানো এপিআই এবং উত্সগুলি (সেইসাথে সমস্যাযুক্ত) এর সাথে বিকাশের জন্য ব্যবহার করি।

যেমনটি কোথাও উল্লিখিত হয়েছে কম / অ্যান্ড্রয়েড / অভ্যন্তরীণ / ** অ্যাক্সেস রুল অ্যাড হওয়ার কারণে এডিটির সাম্প্রতিক সংস্করণগুলিতে এখনও লুকানো থাকবে।


আমি কীভাবে এই উপরের পাথ / টার্গেট / সাধারণ / আপত্তি / জাভা-এলবিআরারি / ফ্রেমওয়ার্ক_ইন্টারমিডিয়েটস / ক্লাসস.জার
বনি

জিনজারব্রেডের জন্য এটি সর্বশেষ আপডেট হওয়ার পরে আমি সেই রেপো সংরক্ষণাগারভুক্ত করেছি । আপনাকে দুর্ভাগ্যজনকভাবে অন্য একটি পদ্ধতি খুঁজে পেতে হবে।
থাউটব্যাকার্স

1

লংয়ের উত্তরটি আমার পক্ষে কাজ করেছিল তবে বিশেষ করে android.provider.Telephony তে আমি এখনও আমার প্রয়োজনীয় কিছু ক্লাস অনুপস্থিত ছিল। আমি এটি এভাবে যুক্ত করতে সক্ষম হয়েছি:

  1. ফ্রেমওয়ার্ক.জার ফাইলটি বের করুন

    mkdir /tmp/framework
    cp framework.jar /tmp
    cd /tmp/framework
    jar xvf ../framework.jar
    mv android classes
    
  2. অ্যান্ড্রয়েড রেপো তৈরি করুন, যা আউট / টার্গেট / সাধারণ / আপত্তি / জেভিএ_লিবিআরআই ডিরেক্টরি তৈরি করবে

  3. অনুপস্থিত ক্লাসগুলি কোথায় রয়েছে তা সন্ধান করুন

    $ cd /path/to/out/target/common/obj/JAVA_LIBRARIES
    $ find . | grep "/Telephony.class"
    ./telephony-common_intermediates/classes/android/provider/Telephony.class
    ./android_stubs_current_intermediates/classes/android/provider/Telephony.class
    
  4. নতুন ক্লাস যুক্ত করুন এবং ফ্রেমওয়ার্ক JAR ফাইলটি পুনর্নির্মাণ করুন

    cd /tmp/framework
    cp -r /path/to/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes .
    cp -r /path/to/out/target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates/classes .
    cd classes
    jar cvf ../framework.jar .
    

অথবা আপনি কেবল অলস হতে পারেন এবং ক্লাসগুলির সমস্তগুলিকে একটি বিশাল জার ফাইলে অন্তর্ভুক্ত করতে পারেন:

cd /tmp/framework
cp -r /path/to/out/target/common/obj/JAVA_LIBRARIES/*/classes .
cd classes
jar cvf ../framework.jar .

আউট / টার্গেট / সাধারণ / আপত্তি / জাভা_লিবারি এই পথটি কীভাবে সন্ধান করবেন?
বনি

@ বুনি আমার উত্তরটি আরও বিশদ সহ আপডেট করেছি। কিন্তু তা এখানে উত্তর মত মনে হয় সহজ হতে পারে stackoverflow.com/a/32626155/399105
bmaupin

আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ @ বিমাউপিন .. আপনি দয়া করে আমাকে কীভাবে এই কাঠামোটি খুঁজে পেতে / টার্গেট / সাধারণ / আপত্তি / জাভাA_LLBARIES ফ্রেমওয়ার্ক জার পেতে পারি তা আমাকে সাহায্য করুন ... আমি সত্যিই আটকে গেলাম..আমি এই পথটি খুঁজে পাচ্ছি না বা কিছু অনুপস্থিত ... দয়া করে গাইড করুন
বনি

0

আমি মন্তব্য করতে পারি না তবে এটি মূলত @ কেনেনিটিএম-এর একটি মন্তব্য ( https://stackoverflow.com/a/13550030/2923406 ) এর উত্তরের :

আপনি যদি গ্রহনটিতে নিম্নলিখিত ত্রুটিটি নিয়ে নিজেকে খুঁজে পান:

The type com.android.internal.util.Predicate cannot be resolved. It is indirectly referenced from required .class   files

(এটি অ্যান্ড্রয়েড.ইনটার্নাল। * উপলব্ধ নেই)

তারপরে একটি সম্ভাব্য সমাধান হ'ল / সিস্টেমে / ফ্রেমওয়ার্ক / ফ্রেমওয়ার্ক ২.জারের জন্য একই পদ্ধতি প্রয়োগ করা। এসডিকে 19 এর জন্য অ্যান্ড্রয়েড এমুলেটর ব্যবহার করে আমার কাছে এই অতিরিক্ত জার রয়েছে। আমার এইচটিসি ওয়ান-তে একটি ফ্রেমওয়ার্ক 3.jarও রয়েছে।


আমি কীভাবে এই উপরের পাথ / টার্গেট / সাধারণ / আপত্তি / জাভা-এলবিআরারি / ফ্রেমওয়ার্ক_ইন্টারমিডিয়েটস / ক্লাসস.জার
বনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.